Компонент ExpressionLanguage
Компонент ExpressionLanguage
Компонент ExpressionLanguage предоставляет движок, который может скомпилировать и оценить выражения. Выражения - это однострочник, который возвращает значение (в основном, но не только, булево).
Установка
1
$ composer require symfony/expression-language
Также вы можете клонировать репозиторий https://github.com/symfony/expression-language.
Note
Если вы устанавливаете этот компонент вне приложения Symfony, вам нужно
подключить файл vendor/autoload.php
в вашем коде для включения механизма
автозагрузки классов, предоставляемых Composer. Детальнее читайте в
этой статье.
Как может двигатель выражений помочь мне?
Целью этого компонента является позволить пользователям использовать выражения внутри конфигурации для более сложной логики. Например, фреймворк Symfony использует выражения в безопасности, для валидации правил и в сопоставлении маршрутов.
Кроме использования комонента в самом фреймворке, компонент ExpressionLanguage также является идеальным кандидатом для основания двигателя бизнес-правила. Идея заключатеся в том, чтобы позволить веб-разработчику сайта сконфигурировать всё динамически, не используя PHP и не вызывая проблем безопасности:
1 2 3 4 5 6 7 8
# Получить специальную цену, если
user.getGroup() in ['good_customers', 'collaborator']
# Продвинуть статью на главную страницу, когда
article.commentCount > 100 and article.category not in ["misc"]
# Отправить уведомление, когда
product.stock 15
Выражения можно рассматривать, как очень защищённую песочницу PHP, и они имеют иммунитет к внешним внедрениям, так как вы должны ясно объявить, какие переменные доступны в выражении.
Использование
Компонент ExpressionLanguage может компилировать и оценивать выражения. Выражения
- это однострочники, которые часто возвращают булево значение, которое может быть
использовано кодом, выполняя выражение в утверждении if
. Простым примером
выражения будет 1 + 2
. Вы такжеможете использовать более сложные выражения,
вроде someArray[3].someMethod('bar')
.
Компонент предоставляет 2 способа работы с выражениями:
- оценка: выражение оценивается без компиляции в PHP;
- компиляция: выражение компилируется в PHP, чтобы иметь возможность кеширования и оценки.
Главный класс компонента - 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)
Синтаксис выражений
См. , чтобы изучить синтаксис выражений компонента ExpressionLanguage.
Передача в переменных
Вы также можете передать переменные в выражение, которые могут быть любым влаидным PHP-типом (включая объекты):
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',
array(
'fruit' => $apple,
)
));
Это отобразит "Honeycrisp". Чтобы узнать больше, см. запись , особенно The Expression Syntax и The Expression Syntax.
Кеширование
Компонент предоставляет несколько разных стратегий кеширования, прочтите больше о них в .
Сброс и редактирование ДАС
ДАС (Дерево абстрактного синтаксиса) выражений может быть сброшено и обработано, как объясняется в .