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.proficeSymfony/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
。