Cover of the book Symfony 5: The Fast Track

Symfony 5: The Fast Track is the best book to learn modern Symfony development, from zero to production. +300 pages in full color showing how to combine Symfony with Docker, APIs, queues & async tasks, Webpack, Single-Page Applications, etc.

Buy printed version

ExpressionLanguageSyntax

5.2 version
Maintained

ExpressionLanguageSyntax

This constraint checks that the value is valid as an ExpressionLanguage expression.

New in version 5.1: The ExpressionLanguageSyntax constraint was introduced in Symfony 5.1.

Applies to property or method
Options
Class Symfony\Component\Validator\Constraints\ExpressionLanguageSyntax
Validator Symfony\Component\Validator\Constraints\ExpressionLanguageSyntaxValidator

Basic Usage

The following constraints ensure that:

  • the promotion property stores a value which is valid as an ExpressionLanguage expression;
  • the shippingOptions property also ensures that the expression only uses certain variables.
  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // src/Entity/Order.php
    namespace App\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Order
    {
        /**
         * @Assert\ExpressionLanguageSyntax()
         */
        protected $promotion;
    
        /**
         * @Assert\ExpressionLanguageSyntax(
         *     allowedVariables = ['user', 'shipping_centers']
         * )
         */
        protected $shippingOptions;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    8
    # config/validator/validation.yaml
    App\Entity\Order:
        properties:
            promotion:
                - ExpressionLanguageSyntax: ~
            shippingOptions:
                - ExpressionLanguageSyntax:
                    allowedVariables: ['user', 'shipping_centers']
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    <!-- config/validator/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="App\Entity\Order">
            <property name="promotion">
                <constraint name="ExpressionLanguageSyntax"/>
            </property>
            <property name="shippingOptions">
                <constraint name="ExpressionLanguageSyntax">
                    <option name="allowedVariables">['user', 'shipping_centers']</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    // src/Entity/Student.php
    namespace App\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    
    class Order
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('promotion', new Assert\ExpressionLanguageSyntax());
    
            $metadata->addPropertyConstraint('shippingOptions', new Assert\ExpressionLanguageSyntax([
                'allowedVariables' => ['user', 'shipping_centers'],
            ]));
        }
    }
    

Options

allowedVariables

type: array or null default: null

If this option is defined, the expression can only use the variables whose names are included in this option. Unset this option or set its value to null to allow any variables.

groups

type: array | string

It defines the validation group or groups this constraint belongs to. Read more about validation groups.

message

type: string default: This value should be a valid expression.

This is the message displayed when the validation fails.

payload

type: mixed default: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.