Передача переменных в пользовательский элемент формы Zend - PullRequest
1 голос
/ 22 апреля 2010

Я пытаюсь создать пользовательский элемент формы, который расширяет Zend_Form_Element_Text с помощью валидатора (поэтому мне не нужно постоянно настраивать валидатор, когда я использую определенные элементы).В любом случае, у меня возникают проблемы при передаче переменной $ maxChars, когда я создаю ее экземпляр в форме Main.Я предоставил свой сокращенный код ниже

Это мой пользовательский элемент ниже

class My_Form_Custom_Element extends Zend_Form_Element_Text
{

public $maxChars

public function init()
{
    $this->addValidator('StringLength', true, array(0, $this->maxChars))
}

public function setProperties($maxChars)
{
    $this->maxChars= $maxChars;
}
}

Здесь я создаю экземпляр своего пользовательского элемента формы.

class My_Form_Abc extends Zend_Form
{
public function __construct($options = null)
{
    parent::__construct($options);
    $this->setName('abc');

    $customElement = new My_Form_Custom_Element('myCustomElement');
    $customElement->setProperties(100); //**<----This is where i set the $maxChars**

    $submit = new Zend_Form_Element_Submit('submit');
    $submit ->  setAttrib('id', 'submitbutton');

    $this->addElements(array($customElement ,$submit));
}
}

Когда я пытаюсь передать '100' с помощью $ customElement-> setProperties (100) в моей форме, он не будет правильно передан моему валидатору StringLength.Я полагаю, это потому, что в Init вызывается валидатор?Как я могу это исправить?

1 Ответ

0 голосов
/ 22 апреля 2010

init() вызывается при создании элемента, поэтому перед вызовом setProperties() и ваш $maxChars не устанавливается.

Я вижу два решения:

1 - Удалить init() и переместить addValidator() в setProperties() метод:

public function setProperties($name, $value)
{
    switch( $name ) {
        case 'maxChars':
            $this->addValidator('StringLength', true, array(0, $value));
            break;
    }
    return $this;
}

2 - Сделайте то, что вы сделали в init() в render() - элемент отображается в конце.

public function render()
{
    $this->addValidator('StringLength', true, array(0, $this->maxChars))
    return parent::render();
}

Я думаю, что сначала лучше.

...