代码之家  ›  专栏  ›  技术社区  ›  Alex Weinstein

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

  •  11
  • Alex Weinstein  · 技术社区  · 15 年前

    乡亲们,

    我希望构建一个php5用户界面,我非常确定它对于许多应用程序都是通用的。基本上,它是一个表达式生成器,允许用户指定通过逻辑运算符(和/或)组合的表达式,如下所示:

    • fieldx>3和fieldy=5
    • fieldy=“bob”和fieldz不为空
    • fieldx>'5/23/2007'或(fieldy=5且fieldy不为空)

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

    [列][条件][值][和/或] [列][条件][值][和/或] …

    你知道有一个开源组件能做到这一点吗?或者可能是这种功能的一部分?

    8 回复  |  直到 14 年前
        1
  •  12
  •   Brian Ramsay    15 年前

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

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

    这不一定是个坏主意,但我们在我的公司发现,非技术用户理解和构建表达式比一组AND或一组ORS复杂得多,这让人吃惊。这对我们的程序员来说是很难理解的,因为我们大多数人可能在我们学会编程之前就已经对布尔逻辑有了直观的理解。

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

    记住-有时候最终用户的困难不是他们不知道正确的语法来表达他们的想法。更常见的情况是,他们甚至不知道如何以明确的方式表达自己的想法,即使他们被提供了一种简单的方式来表达。

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

        2
  •  1
  •   Steve Goodman    15 年前

    这不是一个组件,但您可以查看 Shopping Cart rule builder in Magento 对于此类功能的可靠PHP实现。它是针对电子商务定制的,所以它不是通用的数据库覆盖,但它有一个很好的条件生成器接口。

        3
  •  1
  •   Robert Greiner    15 年前

    我认为这是一个非常有趣的想法。你打算为个人使用还是通过工作来完成这个项目?

    如果你打算亲自做这个项目,也许你应该自己写,然后把它变成一个开源项目。看起来这方面已经有了一些兴趣,这将是一个很好的学习经验。

    否则,我就可以看到一家公司如何从这样的东西中找到价值。它将给程序员另一个实用程序,帮助他们做他们的工作稍微容易一点,并从长远来看支付红利。

    不管怎样,这个项目是成功的。你将学到很多,并且创造一些别人认为有用的东西。

        4
  •  1
  •   Mario Awad    14 年前

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

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

        5
  •  0
  •   Christophe Eblé    15 年前

    我认为这与用户界面比一般的PHP更相关。你最好重新回答你的问题。也许您只想在PHP中解析这些定义,在本例中,我建议您使用preg_replace_回调。

        6
  •  0
  •   troelskn    15 年前

    我首先创建一个面向对象的查询模型。如。 Criteria-objects . 接下来的步骤是编写一个允许操作这个模型结构的UI。

        7
  •  0
  •   Kuroki Kaze    15 年前

    我最近自己完成了这样的功能,而且,imho,更容易编写自己的实现。

        8
  •  -5
  •   Gabriel Sosa    15 年前

    为什么不尝试使用 smarty 这是一个模板引擎。您只需要获取并分析用户输入。

    现在我在想,无论如何都要检查用户输入以避免注入。

    推荐文章