Универсальный конструктор декларативных выражений в PHP

StackOverflow https://stackoverflow.com/questions/967719

Вопрос

Люди,

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

  • fieldX > 3 И FieldY = 5
  • FieldY = "bob", а fieldZ не равен нулю
  • fieldX > '23.05.2007' ИЛИ (значение FieldY = 5, а значение FieldY не равно нулю)

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

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

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

Посмотри на это: http://www.codeproject.com/KB/custom-controls/SqlWhereBuilder.aspx

Загрузите клиентскую версию компонента JavaScript Library и настройте его в соответствии с вашими потребностями.Ваше здоровье.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top