Динамическое построение форм / метапрограммирование / PHP - PullRequest
0 голосов
/ 03 февраля 2011

Я ищу идеи дизайна для создания динамических форм.

В настоящее время у меня есть набор моделей с несколькими свойствами / переменными, например:

 class Group extends IDKModel {

    /**
     * @Form
     */
    public $title;
    /**
        * @Form(validation="{my validation rules here}")
    */
    public $permissions;
}

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

Например, как показывать $ permissions, только если пользователь является администратором.Как показать $ title, если время дня прошло после 12:00 по Гринвичу.В основном любой вид условного.

Взято с #php на irc.quakenet.org:

[10:50] <ramirez> i would not try to stick all of the meta-info under one attribute
[10:50] <ramirez> it'd be much cleaner to do something like
[10:50] <ramirez> @FormElement
[10:51] <ramirez> @Validator(params)
[10:51] <ramirez> etc
[10:52] <ramirez> anyways, I would probably do something like.. @Filter(name="Group",value="admin,editor")
[10:53] <ramirez> then for each filter you want to implement, you'll create a class like "Model_Filter_Group", which would be used for eg. the above filter
[10:53] <ramirez> that class in this case would simply explode the groups by comma and see if user is in any of those groups
[10:54] <ramirez> you can use that for any kind of filtering, eg: @Filter(name="PastTime", value="12:00")

У кого-нибудь есть более простая идея?

1 Ответ

0 голосов
/ 06 февраля 2011

Я предлагаю вам взглянуть на компонент Zend_Form в Zend Framework: Zend Framework Ссылка: Zend_Form

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

Даже если ZF бесполезен для вас, вы можете найти там хорошие идеи.

Кстати: руководство охватывает только основы, а также учебники, найденные в Интернете

...