0

Zend Framework 2 のチュートリアルに従いましたが、レンダリングされたフォームで、ラベルをバインドするための規則は、「for」属性を使用するのではなく、ラベル タグで入力要素をラップすることであることがわかります。チュートリアルでは取り上げていませんが、属性配列を使用すると入力要素自体にクラスを設定できると (正しく) 推測しましたが、本当にやりたいことは、オプションで定義されたラベルにクラスを適用することです。

チュートリアルで使用されている例を次に示します ( からAlbumForm.php)。

$this->add(array(
    'name'       => 'title',
    'attributes' => array(
        'class' => 'required', // <- I added this
        'type' => 'text',
    ),
    'options' => array(
        'label' => 'Title',
    ),
));

これは次のようにレンダリングされます。

<label><span>Title</span><input name="title" class="required" type="text" value=""></label>

必要に応じて、スパン タグにクラスを適用することもできますが、ラベルでクラスを使用してから、スパン要素と入力要素に css 子セレクターを使用することをお勧めします。

チュートリアルと適切なセクションのコメントを読み直し、Zend\Form API ドキュメント自体を掘り下げましたが、この方法でフォーム要素を宣言する際にクラス属性をラベルに適用する方法がわかりません。 .


フォーム レンダリングに関するもう 1 つの些細な問題は、フォーム要素間に改行がなく、インラインでレンダリングされているように見えることです。add.phtml次のように、ビュー スクリプト (およびedit.phtml)に改行を追加することで、これを回避しました。

echo $this->formRow($form->get('title')) . "\n";

formCollection()ただし、これは、ビュー内のすべてのエコーされたフォーム ステートメントを処理する必要があり、また を使用するとフォーム出力全体がインラインでレンダリングされるという面倒な作業のように思えます。読みやすくするために、ソースを表示するときに少なくとも適切な場所に改行を入れたいと思います(適切なインデントも望んでいますが、IDEでさえ多くの場合間違っているため、それは難しい注文のようです)

それで、私が見逃しているこれらの懸念のいずれか、または代わりにファクトリーまたはヘルパーを定義する方法のいずれかに対する組み込みオプションはありますか? ヘルパーを作成する必要がある場合は、それをすべてのモジュールに適用したいと思います。

4

1 に答える 1

6

クラスをラベルに追加するには、構成で「label_attributes」キーを使用します。

$this->add(array(
    'name'       => 'title',
    'attributes' => array(
        'type' => 'text',
    ),
    'options' => array(
        'label' => 'Title',
        'label_attributes' => array(
            'class' => 'required',
        ),
    ),
));

新しい行を追加するには、独自のFormRowビュー ヘルパーを記述するか、次のようにビュー スクリプト内でラベルと要素を別々にレンダリングします。

$form = $this->form;
$form->prepare();
echo $this->form()->openTag($form) . "\n";

echo $this->formLabel($form->get('title')) . "\n";
echo $this->formInput($form->get('title')) . "\n";
echo $this->formElementErrors($form->get('title'));

// other elements
echo $this->form()->closeTag($form) . "\n";
于 2013-03-28T07:46:43.000 に答える