带有PHP和JavaScript绑定的可移植表达式语言?
我使用的web应用程序使用服务器端PHP和客户端Javascript的大量混合,我希望管理员能够配置一些基本条件。例如,我们可能有一个数据模型,其中包含:带有PHP和JavaScript绑定的可移植表达式语言?,javascript,php,dsl,Javascript,Php,Dsl,我使用的web应用程序使用服务器端PHP和客户端Javascript的大量混合,我希望管理员能够配置一些基本条件。例如,我们可能有一个数据模型,其中包含: var person = { name: 'Alice', age: 33, favorite_color: 'purple', address: {street: '123 Some St', state: 'NY'} }; 管理员可能希望根据条件隐藏字段或触发操作,如: ((person.age > 20) or
var person = {
name: 'Alice',
age: 33,
favorite_color: 'purple',
address: {street: '123 Some St', state: 'NY'}
};
管理员可能希望根据条件隐藏字段或触发操作,如:
((person.age > 20) or (person.favorite_color == 'red')) and (person.address.state == 'NY')
理想情况下,我们可以在不同的上下文中使用相同的条件,例如客户端验证和服务器端验证
如果应用程序只是服务器端PHP,或者是全栈JS,那么可以使用PHPeval()
或JSeval()
。但对于涉及多种语言的应用程序,这是行不通的。似乎需要创建一个小型DSL,其中包含针对不同平台的实现,例如
// JS
var condition = "(person.age > 20) or (person.favorite_color == 'red')";
var isMatch = ExpressionLanguage.eval(condition, {
person: {...}
})
// PHP
$condition = "(person.age > 20) or (person.favorite_color == 'red')";
$isMatch = ExpressionLanguage::eval($condition, array(
'person' => array(...),
));
我遇到过,它采用了类似的可移植方法来模板化。然而,它的设计是明确的“无逻辑”,不支持条件。尽管如此,这似乎是一个相当普遍的问题。其他人是如何满足可移植条件的需求的?注意,表达式语言也比JS/PHP
eval()更安全,因为它不允许任意代码执行。。。。它甚至不是图灵完全。是一副超级胡子,对你有用吗?我在PHP/Javascript项目中使用它,对此我非常满意。哦,这是个好主意。不幸的是,一些快速搜索表明它不支持通用的条件符号:可能没有答案。。。开始考虑自己怎么做。。。