Dependency injection

This commit is contained in:
Simon Vieille 2016-05-23 20:19:13 +02:00
parent a0a4ff15ee
commit 0c5b54c79e
3 changed files with 30 additions and 19 deletions

View file

@ -29,12 +29,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
require __DIR__.'/vendor/autoload.php'; require __DIR__.'/vendor/autoload.php';
// Initialisation of the parser
$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv');
$parser->setHasLegend(true);
// Initialisation of the validator // Initialisation of the validator
$validator = new Validator($parser, Validation::createValidator()); $validator = new Validator();
// The first field must contain an email // The first field must contain an email
$validator->addFieldConstraint(0, new 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) { if ($validator->isValid() === false) {
foreach ($validator->getErrors() as $error) { foreach ($validator->getErrors() as $error) {

View file

@ -10,12 +10,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
require __DIR__.'/vendor/autoload.php'; require __DIR__.'/vendor/autoload.php';
// Initialisation of the parser
$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv');
$parser->setHasLegend(true);
// Initialisation of the validator // Initialisation of the validator
$validator = new Validator($parser, Validation::createValidator()); $validator = new Validator();
// The first field must contain an email // The first field must contain an email
$validator->addFieldConstraint(0, new 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) { if ($validator->isValid() === false) {
foreach ($validator->getErrors() as $error) { foreach ($validator->getErrors() as $error) {

View file

@ -7,6 +7,7 @@ use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\Validator\RecursiveValidator; use Symfony\Component\Validator\Validator\RecursiveValidator;
use Symfony\Component\Validator\ConstraintViolation; use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\Validation;
/** /**
* Class Validator * Class Validator
@ -55,10 +56,12 @@ class Validator
* @param CsvParser $parser * @param CsvParser $parser
* @param RecursiveValidator $validator * @param RecursiveValidator $validator
*/ */
public function __construct(CsvParser $parser, RecursiveValidator $validator) public function __construct(RecursiveValidator $validator = null)
{ {
$this->parser = $parser; if ($validator === null) {
$this->parser->parse(); $validator = Validation::createValidator();
}
$this->validator = $validator; $this->validator = $validator;
} }
@ -110,12 +113,17 @@ class Validator
/** /**
* Run the validation * 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; return;
} }
$this->validateLegend(); $this->validateLegend();
$this->validateDatas(); $this->validateDatas();
$this->validateFields(); $this->validateFields();
@ -123,7 +131,10 @@ class Validator
$this->hasValidate = true; $this->hasValidate = true;
} }
/**
* Validates the legend
*/
protected function validateLegend() protected function validateLegend()
{ {
if (!$this->parser->getHasLegend()) { if (!$this->parser->getHasLegend()) {