From 0c5b54c79e85fe28ae43c2d407a78742ec6738b9 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 23 May 2016 20:19:13 +0200 Subject: [PATCH] Dependency injection --- README.md | 12 ++++++------ example.php | 12 ++++++------ src/Deblan/CsvValidator/Validator.php | 25 ++++++++++++++++++------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 3a07c82..381aac3 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface; require __DIR__.'/vendor/autoload.php'; -// Initialisation of the parser -$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); -$parser->setHasLegend(true); - // Initialisation of the validator -$validator = new Validator($parser, Validation::createValidator()); +$validator = new Validator(); // The first field must contain an email $validator->addFieldConstraint(0, new Email()); @@ -52,7 +48,11 @@ $validator->addDataConstraint(new Callback(function($data, ExecutionContextInter } })); -$validator->validate(); +// Initialisation of the parser +$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); +$parser->setHasLegend(true); + +$validator->validate($parser); if ($validator->isValid() === false) { foreach ($validator->getErrors() as $error) { diff --git a/example.php b/example.php index 2a475df..05c5aff 100644 --- a/example.php +++ b/example.php @@ -10,12 +10,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface; require __DIR__.'/vendor/autoload.php'; -// Initialisation of the parser -$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); -$parser->setHasLegend(true); - // Initialisation of the validator -$validator = new Validator($parser, Validation::createValidator()); +$validator = new Validator(); // The first field must contain an email $validator->addFieldConstraint(0, new Email()); @@ -33,7 +29,11 @@ $validator->addDataConstraint(new Callback(function($data, ExecutionContextInter } })); -$validator->validate(); +// Initialisation of the parser +$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); +$parser->setHasLegend(true); + +$validator->validate($parser); if ($validator->isValid() === false) { foreach ($validator->getErrors() as $error) { diff --git a/src/Deblan/CsvValidator/Validator.php b/src/Deblan/CsvValidator/Validator.php index 8ee6624..3d0c083 100644 --- a/src/Deblan/CsvValidator/Validator.php +++ b/src/Deblan/CsvValidator/Validator.php @@ -7,6 +7,7 @@ use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\Validator\RecursiveValidator; use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\Validation; /** * Class Validator @@ -55,10 +56,12 @@ class Validator * @param CsvParser $parser * @param RecursiveValidator $validator */ - public function __construct(CsvParser $parser, RecursiveValidator $validator) + public function __construct(RecursiveValidator $validator = null) { - $this->parser = $parser; - $this->parser->parse(); + if ($validator === null) { + $validator = Validation::createValidator(); + } + $this->validator = $validator; } @@ -110,12 +113,17 @@ class Validator /** * Run the validation */ - public function validate() + public function validate(CsvParser $parser) { - if ($this->hasValidate) { + if ($this->parser !== $parser) { + $this->parser = $parser; + $this->parser->parse(); + $this->errors = []; + } + elseif ($this->hasValidate) { return; } - + $this->validateLegend(); $this->validateDatas(); $this->validateFields(); @@ -123,7 +131,10 @@ class Validator $this->hasValidate = true; } - + + /** + * Validates the legend + */ protected function validateLegend() { if (!$this->parser->getHasLegend()) {