问题 PHP中的通用声明表达式生成器


伙计们,

我正在构建一个PHP5 UI,我很确定这是一堆应用程序的常见。基本上,它是一个表达式构建器,允许用户通过逻辑运算符(AND / OR)指定表达式,如下所示:

  • FieldX> 3 AND FieldY = 5
  • FieldY =“bob”,FieldZ不为空
  • FieldX>'5/23/2007'OR(FieldY = 5 AND FieldY不为空)

理想情况下,像这样的系统允许我作为程序员指定用户可以选择的参数列表(列)和每个参数的数据类型。它还提供了一个友好的,用户友好的界面来定义这样的表达式 - 我想象的是像桌子一样,每行有几个选择器:

[栏目] [条件] [价值] [和/或]  [栏目] [条件] [价值] [和/或]  ...

你知道一个类似的开源组件吗?或者也许是这种功能的一部分?


12808
2018-06-09 01:02


起源



答案:


提醒一句。这些类型的通用表达式构建器通常被认为是解决各种用户问题的优秀解决方案。思维倾向于遵循这些思路:

  • 用户想要所有这些不同的报告
  • 我们无法向他们提供SQL访问权限(即使他们能理解它)
  • 我们没有时间编写所有这些自定义报告
  • 因此,我将为他们提供一种简单的方法来编写查询,而无需了解特定的语法,表格和字段。

这不一定是个坏主意,但我们在我的公司发现的是,非技术用户在理解和构建比一组ANDS或一组OR​​S更复杂的表达方面有惊人的难度。这对我们程序员来说很难掌握,因为我们大多数人甚至在学习编程之前就可能对布尔逻辑有直观的理解。

我建议您不要试图给予他们完全的灵活性来创建他们想要的任何表达式,而是将一个UI组合在一起,让程序员在后端定义更复杂的东西,但在前端为用户提供简单的选择 - 结束。显然,这说起来容易做起来难。

记住 - 有时最终用户的困难并不在于他们不知道表达他们想法的正确语法。更常见的是因为他们甚至不知道如何以明确的方式表达他们的想法,即使他们提供了一种简单的方法。

注意:我并不是说最终用户总是蠢货 - 只是说他们的思维可能与我们疯狂的开发人员不同。


12
2018-06-16 20:27



这是一个伟大的,伟大的观点。大多数人不会考虑决策树。 - Steve Goodman


答案:


提醒一句。这些类型的通用表达式构建器通常被认为是解决各种用户问题的优秀解决方案。思维倾向于遵循这些思路:

  • 用户想要所有这些不同的报告
  • 我们无法向他们提供SQL访问权限(即使他们能理解它)
  • 我们没有时间编写所有这些自定义报告
  • 因此,我将为他们提供一种简单的方法来编写查询,而无需了解特定的语法,表格和字段。

这不一定是个坏主意,但我们在我的公司发现的是,非技术用户在理解和构建比一组ANDS或一组OR​​S更复杂的表达方面有惊人的难度。这对我们程序员来说很难掌握,因为我们大多数人甚至在学习编程之前就可能对布尔逻辑有直观的理解。

我建议您不要试图给予他们完全的灵活性来创建他们想要的任何表达式,而是将一个UI组合在一起,让程序员在后端定义更复杂的东西,但在前端为用户提供简单的选择 - 结束。显然,这说起来容易做起来难。

记住 - 有时最终用户的困难并不在于他们不知道表达他们想法的正确语法。更常见的是因为他们甚至不知道如何以明确的方式表达他们的想法,即使他们提供了一种简单的方法。

注意:我并不是说最终用户总是蠢货 - 只是说他们的思维可能与我们疯狂的开发人员不同。


12
2018-06-16 20:27



这是一个伟大的,伟大的观点。大多数人不会考虑决策树。 - Steve Goodman


这不是一个组件,但您可以查看一下“条件”选项卡 购物车规则建设者在Magento 用于此类功能的可靠PHP实现。它是针对电子商务定制的,因此它不是通用的数据库覆盖,但它确实具有良好的条件构建器界面。


1
2018-06-12 15:37



史蒂夫的这个版本是什么?我想我正在使用1.1.3并且没有这个...... - alex
它应该 - 在主水平菜单中,转到促销>购物车价格规则。然后添加新规则。在新规则表单中,单击左侧标有“条件”的选项卡。我正在运行1.0.19+ - Steve Goodman


我认为这是一个非常有趣的想法。您是否计划将此项目用于个人用途或通过工作?

如果您打算亲自处理这个项目,也许您应该自己编写并将其转换为开源项目。看起来这个领域已经有了一些兴趣,这将是一个很好的学习经历。

否则,我可以看到一家公司如何在这样的事情中找到价值。这将为程序员提供另一个实用程序,可以帮助他们更轻松地完成工作并从长远来看支付股息。

无论哪种方式,这个项目都是胜利。您将学到很多东西,并创造出其他人认为有用的东西。


1
2018-06-12 15:32





看一下这个: http://www.codeproject.com/KB/custom-controls/SqlWhereBuilder.aspx

下载组件的客户端JavaScript库版本并根据您的需要进行自定义。干杯。


1
2017-09-17 12:25



这给了一些非常好的想法,谢谢! - NPC


我认为这通常与PHP相关,而不是PHP。你最好重新提出你的问题。也许您只想在PHP中解析这些定义,在这种情况下我建议使用preg_replace_callback。


0
2018-06-09 08:32





我首先创建一个面向对象的查询模型。例如。 标准的对象。接下来的步骤是编写一个允许操作此模型结构的UI。


0
2018-06-09 11:56





我最近自己完成了这样的功能,恕我直言,编写自己的实现更容易。


0
2018-06-09 13:50



它是用PHP吗?小心发布一些代码?谢谢 - alex
是的,PHP。实际上它是蹩脚和直截了当的。这是规则结构:$ rule = array('field'=>'name','action'=>'eq',// test for equality'value'='John *','bit_operation'=>'AND' //在这个条件和下一个之间加入}规则被保存到会话中的数组并被SQL查询构建函数使用。没有类,没有OOP - 只是这个:) - Kuroki Kaze
Arrgh,对我来说没有代码结构。 - Kuroki Kaze


为什么不尝试使用 智者 这是一个模板引擎。你只需要获取并解析用户输入。

现在我正在考虑,以任何方式执行此操作都需要您检查用户输入以避免注入。


-5
2018-06-09 03:14