The ExpressionLanguage Component ¶
The ExpressionLanguage component provides an engine that can compile and evaluate expressions. An expression is a one-liner that returns a value (mostly, but not limited to, Booleans).
ExpressionLanguage コンポーネントは、式をコンパイルおよび評価できるエンジンを提供します。式は、値を返すワンライナーです (ほとんどがブール値ですが、これに限定されません)。
Installation ¶
1 |
$ composer require symfony/expression-language
|
Note
If you install this component outside of a Symfony application, you must
require the vendor/autoload.php
file in your code to enable the class
autoloading mechanism provided by Composer. Read
this article for more details.
How can the Expression Engine Help Me? ¶
The purpose of the component is to allow users to use expressions inside configuration for more complex logic. For some examples, the Symfony Framework uses expressions in security, for validation rules and in route matching.
Besides using the component in the framework itself, the ExpressionLanguage component is a perfect candidate for the foundation of a business rule engine. The idea is to let the webmaster of a website configure things in a dynamic way without using PHP and without introducing security problems:
1 2 3 4 5 6 7 8 |
# Get the special price if
user.getGroup() in ['good_customers', 'collaborator']
# Promote article to the homepage when
article.commentCount > 100 and article.category not in ["misc"]
# Send an alert when
product.stock
|
Expressions can be seen as a very restricted PHP sandbox and are immune to external injections as you must explicitly declare which variables are available in an expression.
Usage ¶
The ExpressionLanguage component can compile and evaluate expressions.
Expressions are one-liners that often return a Boolean, which can be used
by the code executing the expression in an if
statement. A simple example
of an expression is 1 + 2
. You can also use more complicated expressions,
such as someArray[3].someMethod('bar')
.
The component provides 2 ways to work with expressions:
- evaluation: the expression is evaluated without being compiled to PHP;評価: 式は PHP にコンパイルされずに評価されます。
- compile: the expression is compiled to PHP, so it can be cached and
evaluated.compile: 式は PHP にコンパイルされるため、キャッシュして評価できます。
The main class of the component is ExpressionLanguage:
1 2 3 4 5 6 7 |
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
$expressionLanguage = new ExpressionLanguage();
var_dump($expressionLanguage->evaluate('1 + 2')); // displays 3
var_dump($expressionLanguage->compile('1 + 2')); // displays (1 + 2)
|
Expression Syntax ¶
See The Expression Syntax to learn the syntax of the ExpressionLanguage component.
Passing in Variables ¶
You can also pass variables into the expression, which can be of any valid PHP type (including objects):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
$expressionLanguage = new ExpressionLanguage();
class Apple
{
public $variety;
}
$apple = new Apple();
$apple->variety = 'Honeycrisp';
var_dump($expressionLanguage->evaluate(
'fruit.variety',
[
'fruit' => $apple,
]
)); // displays "Honeycrisp"
|
For more information, see the The Expression Syntax entry, especially Working with Objects and Working with Arrays.
Caution
When using variables in expressions, avoid passing untrusted data into the array of variables. If you can't avoid that, sanitize non-alphanumeric characters in untrusted data to prevent malicious users from injecting control characters and altering the expression.
Caching ¶
The component provides some different caching strategies, read more about them in Caching Expressions Using Parser Caches.
AST Dumping and Editing ¶
The AST (Abstract Syntax Tree) of expressions can be dumped and manipulated as explained in Dumping and Manipulating the AST of Expressions.
Learn More ¶
- Dumping and Manipulating the AST of Expressions式の AST のダンプと操作
- Caching Expressions Using Parser Cachesパーサー キャッシュを使用した式のキャッシュ
- Extending the ExpressionLanguageExpressionLanguage の拡張
- The Expression Syntax式の構文
- How to Inject Values Based on Complex Expressions複雑な式に基づいて値を挿入する方法
- Expression表現