PHP规则引擎的JavaScript前端
我想做的是创建一个基于Web的规则引擎,用户可以在其中创建条件语句,将它们存储在数据库中,然后在数据集上执行它们。(例如,如果颜色等于绿色,则在描述中添加一些内容) 所以我的想法是使用JavaScript前端规则生成器()以JSON构建一个表达式,并将该命令表达式存储在MongoDB中 现在,当这些规则需要执行时,它们会从数据库中提取出来,并通过Ruler(一个无状态PHP规则引擎()构建和执行PHP规则引擎的JavaScript前端,javascript,php,design-patterns,rule-engine,rule,Javascript,Php,Design Patterns,Rule Engine,Rule,我想做的是创建一个基于Web的规则引擎,用户可以在其中创建条件语句,将它们存储在数据库中,然后在数据集上执行它们。(例如,如果颜色等于绿色,则在描述中添加一些内容) 所以我的想法是使用JavaScript前端规则生成器()以JSON构建一个表达式,并将该命令表达式存储在MongoDB中 现在,当这些规则需要执行时,它们会从数据库中提取出来,并通过Ruler(一个无状态PHP规则引擎()构建和执行 因此,我缺少的是如何将JSON命令转换为Ruler能够理解的链接PHP命令?有没有一种设计模式可以解
因此,我缺少的是如何将JSON命令转换为Ruler能够理解的链接PHP命令?有没有一种设计模式可以解决类似的问题?所以听起来你需要编写一个解析器(或解释器),一种可以从JSON文件中计算命令(如
equal
和equalOrCreateThan
或short synax=
和=
),并基于这些命令构建表达式的工具
看看这个链接,它会让你了解我的意思。我希望我能引用它,但这是一个幻灯片放映。我认为batter方法是使用服务规则引擎并将其作为服务公开。然后,您的javascript应用程序可以简单地与服务通信、执行和操作规则 这种方法的好处是您的规则不会在客户机上执行,而且您可以做一些有趣的事情,比如连接到数据库后端而不影响任何事情,并以规则操作的方式运行任务。值得一提的是,并非所有规则都能够在客户端执行,因为不同类型的依赖关系:数据、服务、资源。。。所以在服务器端运行它们(在大多数情况下)更可取。最重要的是,在服务器上运行时,这些规则可以在多个客户端之间共享
例如,您可以检查并查看通用javascript如何与服务器通信以执行。我们刚刚发布并积极支持名为Gandalf的项目,您可以在这里找到它:。Gandalf由两个独立的项目组成:决策引擎后端和it前端 我看起来很适合你的需要,只是它是建立在不同的库上的 对你的利弊:
- 您不需要重新发明GUI,也不需要担心后端支持
- 但您需要删除当前的解决方案,并通过API使用新的解决方案
$variables = ['foo' => 6];
$rule = new Rule('foo in [4, 6, 7]', $variables);
var_dump($rule->isTrue()); // bool(true)
或者这样更复杂的东西:
use nicoSWD\Rule;
$ruleStr = '
// This is true
2 < 3 && (
// This is false
foo in [4, 6, 7] ||
// True
[1, 4, 3].join("") === "143"
) && (
// True
"foo|bar|baz".split("|" /* uh oh */) === ["foo", /* what */ "bar", "baz"] &&
// True
bar > 6
)';
$rule = new Rule($ruleStr);
var_dump($rule->isTrue()); // bool(true)
使用nicoSWD\Rule;
$ruleStr='1〕
//这是真的
2 < 3 && (
//这是假的
foo-in[4,6,7]||
//真的
[1,4,3]。连接(“”=“143”
) && (
//真的
“foo | bar | baz”.split(“|”/*uh-oh*/)===[“foo”、/*what*/“bar”、“baz”]&&
//真的
巴>6
)';
$rule=新规则($ruleStr);
变量转储($rule->isTrue());//布尔(真)
我希望它能满足您的需要。我发现这个库包含一个解析器并支持“英语”规则。