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
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.