-3

プロジェクトで Zend Framework を使用しています。次のように、フォームに説明/メモを追加したい

fields marked by * are mandatory

しかし、フォームに説明を追加する方法と、デコレータで使用する方法がわかりませんでした。

どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

1

次の 2 つのオプションがあります。

  • from デコレータを使用するか、
  • 拡張Zend_Form_Elementしてカスタム要素を作成する

生の HTML コードの一部をフォームの要素の前後だけでなく、それらの間に追加することは非常に一般的であるため、私は後者を使用します。

次のようにする必要があります。

class My_Form_Element_Raw extends Zend_Form_Element
{
    protected $raw_html;
    public function setRawHtml($value)
    {
        $this->raw_html = $value;
        return $this;
    }
    public function getRawHtml()
    {
        return $this->raw_html;
    }
    public function render()
    {
        // you can use decorators here yourself if you want, or wrap html in container tags
        return $this->raw_html;
    }
}

$form = new Zend_Form();
// add elements
$form->addElement(
    new My_Form_Element_Raw(
        'my_raw_element', 
        array('raw_html' => '<p class="highlight">fields marked by * are mandatory</p>')
    )
);
echo $form->render();

拡張するときは、メソッドZend_Form_Elementをオーバーライドする必要はありません。Zend は内部的にset*get*および保護されたプロパティを使用して、この場合のように要素オプションを検出します 。また、プロパティに名前を付けると、それぞれ 'raw_html' と 'rawHtml' の両方のオプションが受け入れられます。setOption/sgetOption/sprotected $raw_html;public function setRawHtml($value)public function getRawHtml()$raw_html

于 2012-09-01T10:33:06.710 に答える
1

フォームにテキストを追加する最も簡単な方法は、適切な html をページ ビューに追加することです。

<div>
    <h4>fields marked by * are mandatory</h>
    <?php echo $this->form ?>
</div>

または、viewScript デコレーターを使用して、フォーム全体のエクスペリエンスを制御します。

<article class="login">
    <form action="<?php echo $this->element->getAction() ?>"
          method="<?php echo $this->element->getMethod() ?>">
        <table>
            <tr>
                <th>Login</th>
            </tr>
            <tr>fields marked by * are mandatory</tr>
            <tr>
                <td><?php echo $this->element->name->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->password->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->submit ?></td>
            </tr>
        </table>
    </form>
</article>

ただし、 を使用してフォームに説明を追加し、$form->setDescription()その説明を でレンダリングできますecho $this->form->getDescription()。これらのメソッドは、フォーム レベルではなく、要素レベルで set および getTag() と共に使用する方がよいでしょう。

アスタリスクの手がかりを提供するには、css を使用します。

dt label.required:before {
    content: "* ";
    color: #ff0000;
}

必要に応じて、css だけを使用して任意のメモを表示できると確信しています。

于 2012-09-01T10:43:21.310 に答える
0
 class FormDecorators {
    public static $simpleElementDecorators = array(
        array('ViewHelper'),
        array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
        array('Description', array('tag' => 'div', 'class' => 'desc-item')),
        array('Errors', array('class' => 'errors')),
        array('HtmlTag', array('tag' => 'div', 'class' => 'form-item'))
    );
    }

これらは私が通常使用する要素のデコレーターであり、* のプレフィックスと説明デコレーターも含まれています。

次にコードを使用します。

$element->setDescription('fields marked by * are mandatory');

1 つの要素に説明を追加します。その後、下部のどこかに表示されるように説明をスタイルできます。これが役立つことを願っています。よい一日を。

于 2012-09-01T10:31:53.057 に答える