Расширение Zend_View_Helper_FormElement - PullRequest
0 голосов
/ 21 июня 2010

Я создал этот файл в My / View / Helper / FormElement.php

<?php

abstract class My_View_Helper_FormElement extends Zend_View_Helper_FormElement
{

    protected function _getInfo($name, $value = null, $attribs = null,
        $options = null, $listsep = null
    ) {

        $info = parent::_getInfo($name, $value, $attribs, $options, $listsep);

        $info['id'] = 'My new ID';

        return $info;
    }
}

Как мне заставить обычные элементы формы использовать это вместо этого?

Почему я хочу это?

Скажем, что я использую одну и ту же форму несколько раз на странице, тэг 'id =' для элементов будет отображаться несколько раз, это недопустимо для w3c. Поэтому изначально я хочу добавить префикс id к идентификатору формы.

Любые лучшие идеи или способы сделать это очень ценятся.

Обновление: Только что понял, что та же проблема с декораторами :( Не думайте, что я выбрал правильный путь.

Ответы [ 2 ]

1 голос
/ 29 июня 2010

Создайте новый класс формы, расширяющий Zend_Form, и в методе init () используйте переменную $ ns, чтобы добавить префикс / суффикс ко всем элементам.Вы можете установить переменную $ ns через конструктор форм.

class Form_Test extends Zend_Form
{

protected $ns;

public function init()
{
    $this->setAttrib('id', $this->ns . 'testForm');

    $name = new Zend_Form_Element_Text('name');
    $name->setAttrib('id', $this->ns . 'name');
    $name->setLabel('Name: *')->setRequired(true);


    $submit = new Zend_Form_Element_Submit('submit');
    $submit->setAttrib('id', $this->ns . 'submitbutton');
    $submit->setLabel('Add')->setIgnore(true);

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

public function setNs($data)
{
    $this->ns = $data;
}

}

В контроллере или везде, где вы вызываете эти формы, укажите каждый экземпляр формы:

$form1 = new Form_Test(array('ns' => 'prefix1'));
$this->view->form1 = $form1;

$form2 = new Form_Test(array('ns' => 'prefix2'));
$this->view->form2 = $form2;

// Validation if calling from the controller
if ($form1->isValid()) ...
0 голосов
/ 01 июля 2010

Использование нескольких экземпляров одинаковых форм на странице может быть проверено, если используется как подчиненная форма.

В подформах префикс всех идентификаторов указывается с именем / идентификатором подчиненной формы.

...