0

このファイルを 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-valid ではありません。最初に、id の前にフォームの id を付けたいと思います。

これを行うためのより良いアイデアや方法は、非常に高く評価されています。

更新:デコレータと同じ問題であることに気付きました:(これが私がたどった正しい道だとは思わないでください。

4

2 に答える 2

1

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()) ...
于 2010-06-28T21:51:20.180 に答える
0

サブフォームとして使用する場合、ページで同じフォームの複数のインスタンスを使用することを検証できます。

サブフォームは、すべてのIDの前にサブフォームの名前/識別子を付けます。

于 2010-06-30T20:02:24.143 に答える