Skip to content

Commit 5735022

Browse files
committed
Add validator
1 parent 5a34949 commit 5735022

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/vendor/
2+
/var/
23
/node_modules/
34
/composer.lock
4-
/drivers/
55

66
/etc/build/*
77
!/etc/build/.gitignore
@@ -12,5 +12,5 @@
1212
/tests/TestApplication/.env.*.local
1313

1414
/.phpunit.result.cache
15-
/behat.yml
15+
/behat.yaml
1616
/phpunit.xml

config/services.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
<argument type="service" id="sylius_import_export.denormalizer.registry" />
5959
<argument type="service" id="doctrine.orm.entity_manager" />
6060
<argument type="service" id="sylius.resource_registry" />
61+
<argument type="service" id="validator" />
6162

6263
<tag name="messenger.message_handler" bus="sylius.command_bus" />
6364
</service>

src/Controller/ImportAction.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Sylius\ImportExport\Messenger\Command\CreateImportProcess;
1717
use Sylius\ImportExport\Uploader\ImportFileUploader;
1818
use Sylius\Resource\Metadata\RegistryInterface;
19+
use Symfony\Component\Form\FormError;
1920
use Symfony\Component\Form\FormFactoryInterface;
2021
use Symfony\Component\HttpFoundation\File\UploadedFile;
2122
use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -47,7 +48,9 @@ public function __invoke(Request $request, string $grid): Response
4748
if ($form->isSubmitted()) {
4849
$errors = [];
4950
foreach ($form->getErrors(true) as $error) {
50-
$errors[] = $error->getMessage();
51+
if ($error instanceof FormError) {
52+
$errors[] = $error->getMessage();
53+
}
5154
}
5255
$errorMessage = !empty($errors) ? implode(', ', $errors) : 'sylius_import_export.import_form_invalid';
5356
$session->getFlashBag()->add('error', $errorMessage);

src/Messenger/Handler/ImportCommandHandler.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Sylius\ImportExport\Messenger\Command\ImportCommand;
2121
use Sylius\Resource\Doctrine\Persistence\RepositoryInterface;
2222
use Sylius\Resource\Metadata\RegistryInterface;
23+
use Symfony\Component\Validator\Validator\ValidatorInterface;
2324

2425
class ImportCommandHandler
2526
{
@@ -29,6 +30,7 @@ public function __construct(
2930
protected DenormalizerRegistryInterface $denormalizerRegistry,
3031
protected EntityManagerInterface $entityManager,
3132
protected RegistryInterface $metadataRegistry,
33+
protected ValidatorInterface $validator,
3234
) {
3335
}
3436

@@ -47,6 +49,19 @@ public function __invoke(ImportCommand $command): void
4749

4850
foreach ($command->batchData as $recordData) {
4951
$entity = $denormalizer->denormalize($recordData, $resourceClass);
52+
53+
$validationGroups = $process->getParameters()['validation_groups'] ?? ['Default'];
54+
$violations = $this->validator->validate($entity, groups: $validationGroups);
55+
56+
if (count($violations) > 0) {
57+
$errorMessages = [];
58+
foreach ($violations as $violation) {
59+
$errorMessages[] = sprintf('%s: %s', $violation->getPropertyPath(), $violation->getMessage());
60+
}
61+
62+
throw new ImportFailedException(sprintf('Validation failed for record: %s', implode(', ', $errorMessages)));
63+
}
64+
5065
$this->entityManager->persist($entity);
5166

5267
++$importedCount;

0 commit comments

Comments
 (0)