3

一部の人にとっては当然のことのように思えるかもしれませんが、私は正直な答えを見つけるのに本当に苦労しています. 私は一般的にググっただけでなく、CakePHP マニュアルと API の両方を読んで、次の質問に対する答えを見つけました。

入力を作成するとき、次のコードは次の出力を作成します。

// in the view
echo $this->Form->input('notes');

// resultant html
<div class="input textarea">
    <label for="notes">Notes</label>
    <textarea id="notes" rows="5" name="notes"></textarea>
</div>

注: これはほとんどの入力タイプで一貫しています。一貫性があるため、書式設定に最適です。

ただし、チェックボックスを使用すると:

//In the view
echo $this->Form->input('ticket_required', 
    ['type' => 'checkbox']
);

// resultant HTML
<div class="input checkbox">
    <input type="hidden" value="0" name="ticket_required">
    <label for="ticket-required">
    <input id="ticket-required" type="checkbox" value="1" name="ticket_required">
    Ticket Required</label>
</div>

[注: 非表示フィールドの必要性/要望を理解しています]

さて..確かに、他のすべての標準入力と同じ形式のアプローチが必要なことは珍しい要件ではないでしょうか?

私の質問 - 次のように CakePHP にチェックボックス要素を作成させるにはどうすればよいですか:

// desired HTML
<div class="input checkbox">
    <input type="hidden" value="0" name="ticket_required">
    <label for="ticket-required">
    Ticket Required</label>
    <input id="ticket-required" type="checkbox" value="1" name="ticket_required">
</div>

明確にするために: 表示される要素の順序は、他の生成された要素と同じです (入力の前にラベルがあり、すべてラッピング div で囲まれています)。

注意してください..私は'nestedInput' => falseオプションを試しました。これにより、実際にはdivからチェックボックス入力が完全に取り除かれます。

なぜこれがそのように行われないのか理解できません...しかし、たとえそうであったとしても、なぜこれがドキュメントの明白な質問ではないのか理解できません.

ああ、うまくいけば、誰かがここで私を助けてくれることを願っています。

前もって感謝します。

リック

4

1 に答える 1

4

私はそれがうまくいくと思っていたnestedInputでしょうが、たとえうまくいったとしても、ウェブサイト全体で作成するすべての入力にそれを追加したくはありません.

CakePHP 3 は文字列テンプレートを使用してフォーム コントロールを構築します。 ニーズに合わせて変更できます

デフォルトでは、チェックボックスはnestingLabelテンプレートを使用しているため、すべての入力がネストされないようにしたい場合は、テンプレートを変更できます。

// src/View/AppView.php

$this->loadView('Form', [
    templates => [
        'nestingLabel' => '<label{{attrs}}>{{text}}</label>{{hidden}}{{input}}'
    ],
    // [More helper default config overrides][2]..
])

ヘルパーをさらに制御するために、コア ヘルパーの 1 つを拡張する独自のヘルパーを作成できます。

于 2015-12-03T01:27:26.340 に答える