Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何验证symfony表达式语言表达式_Php_Validation_Symfony - Fatal编程技术网

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

Php 如何验证symfony表达式语言表达式,php,validation,symfony,Php,Validation,Symfony,我正在制作一个系统,用户可以在其中输入自己的表达式。 我已经完成了所有步骤,但似乎找不到一个示例,说明如何在执行之前验证用户输入的表达式 是否有“标准方法”或“最佳实践”来验证用户输入的表达式,还是我必须自己进行验证 编辑 我只想允许用户过滤一个表(数组),这样我猜表达式就不会太复杂了 因此,对于头文件为array('id','firstName','lastName','docId','profice')的数组我希望表达式如下:row.id

我正在制作一个系统,用户可以在其中输入自己的表达式。 我已经完成了所有步骤,但似乎找不到一个示例,说明如何在执行之前验证用户输入的表达式

是否有“标准方法”或“最佳实践”来验证用户输入的表达式,还是我必须自己进行验证

编辑 我只想允许用户过滤一个表(数组),这样我猜表达式就不会太复杂了


因此,对于头文件为
array('id','firstName','lastName','docId','profice')的数组
我希望表达式如下:
row.id<2和row.profice
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
}
但是,我们不能按类型控制错误:

  • 无效语法
  • 找不到变量
  • 意外标记
  • 未找到函数
  • 等等

  • 作为解决方案(坏主意),您可以通过异常中的文本控制类型。

    i取决于“表达式”的复杂程度,最简单的情况可以使用正则表达式进行验证,对于复杂的情况,您需要构建状态机(或使用外部库)。你给我们举几个例子怎么样?嗯,我想你不需要处理复杂的表达式,所以我认为在你的例子中,更好的解决方案是为用户提供更严格的基于客户端(javascript)的过滤器,用户可以从数组(表)列、运算符和值中进行选择。。。(他可以添加更多的过滤器)只是一个旁注:从Symfony 4.2开始,类
    SyntaxError
    仍然存在,但是使用了
    RuntimeException