Nuevo en Symfony 5.1: Validador para ExpressionLanguage

El componente ExpressionLanguage permite compilar y evaluar expresiones. Muchas empresas lo utilizan para que personas que no son programadoras puedan crear "reglas de negocio". Por ejemplo, se podría usar la siguiente expresión para decidir si la tienda ofrece un descuento o no: 'user["isActive"] == true and product["price"] > 20'.

En Symfony 5.1 hemos mejorado el componente ExpressionLanguage para poder validar expresiones sin tener que procesarlas o evaluarlas. Las clases ExpressionLanguage y Parser ahora incluyen un método lint() que puede validar expresiones:

use Symfony\Component\ExpressionLanguage\Lexer;
use Symfony\Component\ExpressionLanguage\Parser;
 
$lexer = new Lexer();
$parser = new Parser([]);
$parser->lint($lexer->tokenize($expression), $allowedVariableNames);
 
$expression = 'foo["some_key"].callFunction(a ? b)';
$allowedVariableNames = ['foo', 'a', 'b'];
// Resultado: ningún error; la expresión es válida.
 
$expression = 'foo["some_key")';
$allowedVariableNames = ['foo'];
// Resultado: Unclosed "[" around position 3 for expression `foo["some_key")`.
 
$expression = '{key: foo key2: bar}';
$allowedVariableNames = ['foo', 'bar'];
// Resultado: A hash value must be followed by a comma
//            Unexpected token "name" of value "key2" ("punctuation" expected with value ",")
//            around position 11 for expression `{key: foo key2: bar}`.

Además de estos métodos lint(), también puedes usar el nuevo validador ExpressionLanguageSyntax en tus entidades:

namespace App\Entity;
 
use Symfony\Component\Validator\Constraints as Assert;
 
class Order
{
    /**
     * @Assert\ExpressionLanguageSyntax()
     */
    protected $promotion;
 
    /**
     * @Assert\ExpressionLanguageSyntax(
     *     names = ['user', 'shipping_centers'],
     *     validateNames = true
     * )
     */
    protected $shippingOptions;
}

Esta funcionalidad fue contribuida por Andrey Sevastianov en el pull request #35849.


Fuente: New in Symfony 5.1: ExpressionLanguage validator

Comentarios

Publicada el

6 de mayo de 2020

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.