如何验证symfony表达式语言表达式

时间:2016-05-11 17:22:16

标签: php validation symfony

我正在建立一个用户可以输入自己的表达式的系统。 我searched所有of internet我似乎无法找到一个示例,说明如何在执行前验证用户输入的表达式。

是否有"标准方式"或者"最佳实践" 验证用户输入的表达式还是我必须自己进行验证?

修改

我只是想让用户过滤一个表(数组),所以我猜的表达式不会过于复杂。

因此对于包含array('id', 'firstName', 'lastName', 'docId', 'profit');标题的数组,我希望表达式为:row.id < 2 and row.profit <= 500

1 个答案:

答案 0 :(得分:3)

Symfony/ExpressionLanguage包有一个SyntaxError类,如果表达式中存在错误,则抛出此异常。

控制错误:

use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\ExpressionLanguage\SyntaxError;

$expressionLanguage = new ExpressionLanguage();

try {
    $expressionLanguage->evaluate('1 + b.foo');
} catch (SyntaxError $e) {
    // Error
}

但是,我们无法按类型控制错误:

  1. 语法无效
  2. 未找到变量
  3. 意外的令牌
  4. 找不到功能
  5. 等...
  6. 作为解决方案(坏主意),您可以通过异常文本控制类型。