Customizing Validation¶

The default validation group for all resources is sylius, but you can configure your own validation.

How to customize validation?¶

Tip

You can browse the full implementation of these examples on this GitHub Pull Request.

Let’s take the example of changing the length of name for the Product entity - watch out the field name is hold on the ProductTranslation model.

In the sylius validation group the minimum length is equal to 2. What if you’d want to have at least 10 characters?

1. Create the config/validator/validation.yaml.

In this file you need to overwrite the whole validation of your field that you are willing to modify. Take this configuration from the src/Sylius/Bundle/ProductBundle/Resources/config/validation/ProductTranslation.xml - you can choose format xml or yaml.

Give it a new, custom validation group - [app_product].

Sylius\Component\Product\Model\ProductTranslation:
    properties:
        name:
            - NotBlank:
                message: sylius.product.name.not_blank
                groups: [app_product]
            - Length:
                min: 10
                minMessage: sylius.product.name.min_length
                max: 255
                maxMessage: sylius.product.name.max_length
                groups: [app_product]

Tip

When using custom validation messages see here how to add them.

2. Configure the new validation group in the config/services.yaml.

# config/services.yaml
parameters:
    sylius.form.type.product_translation.validation_groups: [app_product]
    sylius.form.type.product.validation_groups: [app_product] # the product class also needs to be aware of the translation's validation

Done. Now in all forms where the Product name is being used, your new validation group will be applied, not letting users add products with name shorter than 10 characters.

Tip

When you would like to use group sequence validation, like so. Be sure to use [Default] as validation group. Otherwise your getGroupSequence() method will not be called.

Good to know¶

See also

All the customizations can be done either in your application directly or in Plugins!