Zend Framework: Расширить Zend_Form, чтобы добавить элементы формы по умолчанию? - PullRequest
0 голосов
/ 26 июля 2010

Я создал свой собственный класс Zend_Form в настоящее время только для того, чтобы добавить некоторые вспомогательные функции и декораторы setdefault.

Теперь я хочу добавить некоторые значения по умолчанию (setMethod('post')) и добавить некоторые элементы (если вы знаете метод honeypot для предотвращения спам-ботов). Как мне это сделать?в __construct()?

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

Переписать конструктор должен быть в порядке.

class Your_Form extends Zend_Form
{
    public function __construct($options = null)
    {
        $this->setMethod('POST');
        $this->addElement('hidden', 'hash', array('ignore' => true));
        parent::__construct($options);
    }

Таким образом, ваши другие формы могут расширяться Your_Form и вызывать init(), поэтому он остается согласованным.

class Model_Form_Login extends Your_Form
{
    public function init()
    {
         $this->addElement('input', 'username');
         ...

Если вы перезаписываете init () - Метод, который вы не используетеВы должны вызвать parent :: __ construct () ...

class Your_Form extends Zend_Form
{
    public function init()
    {
        $this->setMethod('POST');
        $this->addElement('hidden', 'hash', array('ignore' => true));

    }

... но все ваши расширяющие формы должны вызывать parent :: init (), как это

class Model_Form_Login extends Your_Form
{
    public function init()
    {
         $this->addElement('input', 'username');
         ...
         parent::init();
2 голосов
/ 26 июля 2010

Если вы прочитаете __construct из Zend_Form, вы увидите, что он вызывает пустой метод init().
Таким образом, у вас есть два варианта:

  1. создать свою собственную конструкциюи не не забудьте вызвать родительскую конструкцию
  2. (рекомендуется) положить то, что вы хотите в методе init().Таким образом, вы будете уверены, что все было создано правильно.

* init() - это нечто согласованное со всей структурой (какой класс вы хотите расширить).

class My_Super_Form extends Zend_Form{
   protected function init(){
     //here I do what ever I want, and I am sure it will be called in the instantiation.
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...