2

1Zend_Formつのページで何度も再利用したいオブジェクトがあります。私が抱えている問題は、レンダリングされるたびに同じ要素 ID を持つことです。フォームをレンダリングするたびに、すべての ID に一意のプレフィックスまたはサフィックスを与える方法を見つけることができませんでした。


完全なソリューション

サブクラスZend_Form:

class My_Form extends Zend_Form
{
    protected $_idSuffix = null;

    /**
     * Set form and element ID suffix
     *
     * @param string $suffix
     * @return My_Form
     */
    public function setIdSuffix($suffix)
    {
        $this->_idSuffix = $suffix;
        return $this;
    }

    /**
     * Render form
     *
     * @param Zend_View_Interface $view
     * @return string
     */
    public function render(Zend_View_Interface $view = null)
    {
        if (!is_null($this->_idSuffix)) {
            // form
            $formId = $this->getId();
            if (0 < strlen($formId)) {
                $this->setAttrib('id', $formId . '_' . $this->_idSuffix);
            }

            // elements
            $elements = $this->getElements();
            foreach ($elements as $element) {
                $element->setAttrib('id', $element->getId() . '_' . $this->_idSuffix);
            }
        }

        return parent::render($view);
    }
}

ビュー スクリプトをループします。

<?php foreach ($this->rows as $row) : ?>
    <?php echo $this->form->setDefaults($row->toArray())->setIdSuffix($row->id); ?>
<?php endforeach; ?>
4

2 に答える 2

2

Zend_Form をサブクラス化し、renderメソッドをオーバーロードして、ID を自動的に生成することができます。

public function render()
{
    $elements = $this->getElements();
    foreach ($elements as $element) {
        $element->setAttrib('id', $this->getName() . '_' . $element->getId();
    }
}

これは単なる疑似コードです。もちろん、必要に応じてこれを変更することもできます。

于 2010-12-14T20:24:09.320 に答える
1

Zend_Form の継承クラスに、静的な整数プロパティ (たとえば、self::$counter としましょう) を追加できます。init() メソッドでインクリメントします。Zend_Form オブジェクトに作成する要素ごとに、そのプロパティを element に追加します。

$element->setAttrib('id', self::$counter + '_myId');
于 2010-12-14T15:07:40.227 に答える