csv-validator/README.md

73 lines
1.8 KiB
Markdown
Raw Normal View History

2015-03-17 16:13:33 +01:00
csv-validator
=============
2016-05-22 19:17:47 +02:00
CSV validator library
That uses the constraints of Symfony framework: [http://symfony.com/doc/current/reference/constraints.html](http://symfony.com/doc/current/reference/constraints.html).
Installation
------------
2016-05-22 19:18:38 +02:00
You need [composer](https://getcomposer.org/):
2016-05-22 19:17:47 +02:00
composer require deblan/csv-validator dev-master
2016-05-20 12:01:26 +02:00
2016-05-20 14:45:28 +02:00
Example
-------
2016-05-22 19:17:47 +02:00
```
<?php
use Deblan\Csv\CsvParser;
use Deblan\CsvValidator\Validator;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Date;
use Symfony\Component\Validator\Constraints\Callback;
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());
// The first field must contain an email
$validator->addFieldConstraint(0, new Email());
// The second field must contain a date
$validator->addFieldConstraint(1, new Date());
// An line must contain 3 columns
$validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) {
if (count($data) !== 6) { // 6 because of the legend (3 fields * 2)
$context->addViolation('The line must contain 3 columns');
}
}));
$validator->validate();
if ($validator->isValid() === false) {
2016-05-22 23:24:27 +02:00
foreach ($validator->getErrors() as $error) {
$line = $error->getLine();
$column = $error->getColumn();
$message = $error->getViolation()->getMessage();
2016-05-22 19:17:47 +02:00
2016-05-22 23:24:27 +02:00
echo <<<EOF
<ul>
<li>Line: $line</li>
<li>Column: $column</li>
<li>
<p>$message</p>
</li>
</ul>
EOF;
2016-05-22 19:17:47 +02:00
}
}
```