2015-12-03 48 views
3

這對你們中的一些人來說似乎很明顯,但我真的很努力地找到一個直接的答案。我一般用Google搜索,以及同時讀取CakePHP的手冊和回答以下問題的API:CakePHP 3.x複選框格式問題

當創建一個輸入,下面的代碼創建了以下成果:

// 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的複選框輸入。

我不明白爲什麼不這樣做......但即使是這樣,我無法理解爲什麼這不是一個明顯的文檔問題。

唉..希望有人可以幫助我在這裏。

在此先感謝。

裏克

+0

我認爲這是你正在尋找的東西:http://stackoverflow.com/a/5394069/3144159 –

+0

這不適用於CakePHP 3.x – elb98rm

回答

4

我本來以爲nestedInput會工作,但即使它,你不希望將它添加到你整個網站創建的每一個輸入。

CakePHP 3使用string templates來構建窗體控件。 You can modify them to suit your needs

默認情況下,該複選框使用nestingLabel模板,所以如果您想要停止嵌套的所有輸入,可以更改模板。

// src/View/AppView.php 

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

在過去的幫手更多的控制,你可以create your own擴展核心助手之一。