Универсальный конструктор декларативных выражений в PHP - PullRequest
11 голосов
/ 09 июня 2009

Народ,

Я собираюсь создать часть PHP5 UI, которая, я уверен, является общей для множества приложений. По сути, это построитель выражений, который позволяет пользователям задавать выражения, объединенные с помощью логических операторов (И / ИЛИ), например:

  • FieldX> 3 AND FieldY = 5
  • FieldY = "bob" и FieldZ не равен нулю
  • FieldX> «23.05.2007» ИЛИ (FieldY = 5 И FieldY не равно нулю)

В идеале, подобная система позволила бы мне, как программисту, указать список параметров, которые пользователь может выбрать (столбцы), и тип данных для каждого из них. Это также обеспечило бы хороший, удобный интерфейс для определения таких выражений - я представляю что-то вроде таблицы, в которой у каждой строки есть несколько средств выбора:

[Столбец] [Условие] [Значение] [И / ИЛИ] [Столбец] [Условие] [Значение] [И / ИЛИ] ...

Знаете ли вы о компоненте с открытым исходным кодом, который делает что-то подобное? Или, может быть, часть такой функциональности?

Ответы [ 8 ]

12 голосов
/ 17 июня 2009

Слово предостережения. Эти типы конструкторов обобщенных выражений обычно считаются отличными решениями для множества пользовательских проблем. Мышление имеет тенденцию идти по этим направлениям:

  • Пользователь хочет все эти разные отчеты
  • Мы никак не можем предоставить им доступ к SQL (даже если бы они могли это понять)
  • У нас нет времени, чтобы написать все эти пользовательские отчеты
  • Поэтому я предоставлю им простой способ написания запросов без необходимости знать конкретный синтаксис, таблицы и поля.

Это не обязательно плохая идея, но мы обнаружили в моей компании, что неопытные пользователи испытывают удивительные трудности с пониманием и построением выражений, более сложных, чем группа ANDS или группа ORS. Нам, программистам, это трудно понять, поскольку большинство из нас, вероятно, имели интуитивное понимание логической логики еще до того, как научились программировать.

Я бы порекомендовал вам не пытаться дать им полную гибкость при создании любого выражения, которое они хотят, и вместо этого вы собрали пользовательский интерфейс, который позволяет программисту определять что-то более сложное в бэкэнде, но дает пользователю простой выбор фронт-энд. Это легче сказать, чем сделать, очевидно.

Помните - иногда трудность для конечных пользователей заключается не в том, что они не знают правильный синтаксис для выражения своей идеи. Чаще всего это потому, что они даже не знают, как сформулировать свои мысли однозначным образом. даже если им был предоставлен простой способ сделать это.

ПРИМЕЧАНИЕ: я не говорю, что конечные пользователи всегда дебилы - просто их ум может работать не так, как мы, сумасшедшие разработчики.

1 голос
/ 17 сентября 2010

Проверьте это: http://www.codeproject.com/KB/custom-controls/SqlWhereBuilder.aspx

Загрузите версию компонента библиотеки JavaScript на стороне клиента и настройте ее в соответствии со своими потребностями. Приветствия.

1 голос
/ 12 июня 2009

Это не совсем компонент, но вы можете взглянуть на вкладку «Условия» в конструкторе правил корзины покупок в Magento , чтобы узнать о реализации PHP такого типа. Он адаптирован для электронной коммерции, поэтому он не является обычным оверлеем базы данных, но имеет отличный интерфейс построения условий.

1 голос
/ 12 июня 2009

Я думаю, что это очень интересная идея. Планируете ли вы работать над этим проектом для личного использования или через работу?

Если вы планируете работать над этим проектом лично, возможно, вам следует написать его самостоятельно и превратить в проект с открытым исходным кодом. Похоже, что уже есть некоторый интерес в этой области, и это будет хороший опыт обучения.

В противном случае я вижу, как компания может найти ценность в чем-то подобном. Это дало бы программистам еще одну утилиту, которая могла бы помочь им немного легче выполнять свою работу и в конечном итоге приносить дивиденды.

В любом случае, этот проект выиграл. Вы многому научитесь и создадите то, что другим людям покажется полезным.

0 голосов
/ 09 июня 2009

Я недавно сделал такую ​​функциональность самостоятельно, и, ИМХО, проще написать собственную реализацию.

0 голосов
/ 09 июня 2009

Я бы начал с создания объектно-ориентированной модели запросов. Например. Критерии-объекты . Следующим шагом является написание пользовательского интерфейса, который позволяет манипулировать этой структурой модели.

0 голосов
/ 09 июня 2009

Я думаю, что это больше связано с пользовательским интерфейсом, чем с PHP в целом. Тебе лучше повторить свой вопрос. Возможно, вы просто хотите проанализировать эти определения в PHP, в этом случае я бы предложил использовать preg_replace_callback.

0 голосов
/ 09 июня 2009

почему бы не попробовать использовать smarty , который является механизмом шаблонов. вам просто нужно получить и разобрать ввод пользователя.

Теперь, когда я подумаю, чтобы сделать это, вам понадобится проверить ввод пользователя, чтобы избежать инъекций.

...