2012-07-20 24 views
2

當使用FormHelper->創建(...),即獲取呈現看起來像這樣的HTML:CakePHP的隱藏_method POST

<form action="/blogs/add" method="post" accept-charset="utf-8"> 
    <div style="display:none;"> 
     <input type="hidden" name="_method" value="POST"> 
    </div> 

    <!-- omitted: form inputs --> 
</form> 

爲什麼與顯示該div:無;風格在那裏?我如何讓它不顯示?

更新:爲了清楚起見,我想知道爲什麼div和div內的隱藏輸入顯示出來。他們似乎沒有必要,因此我不希望他們在那裏。

回答

1

該div是有效的HTML。

非塊級元素(如<input>)直接在<form>標記內無效,直到HTML5。 Source

編輯:要回答你的問題,你不能輕易擺脫它。它被硬編碼到FormHelper :: create()中,你必須在一個自定義助手中覆蓋該方法。爲什麼它打擾你呢?

+0

嗯,我使用HTML5,但我的問題是指div元素和它的輸入。爲什麼div在那裏,爲什麼那裏隱藏的輸入?這不是'困擾'我,我只是想了解我使用得更好的框架。 – 2012-07-20 21:08:35

+1

那麼,如果你使用安全組件,更多明顯必要的字段將被添加用於csrf檢查,並在該div中。據我所知,該輸入是區分添加(創建)和編輯(更新)表單。 – tigrang 2012-07-20 21:26:18

+0

將帖子添加到「添加」操作中,將帖子修改爲「修改」操作,爲什麼我需要隱藏的輸入? – 2012-07-21 01:46:28

-1

使用hiddenField =>虛假財產

+0

這不會停止該div的輸出 – tigrang 2012-07-20 04:30:36

0

This link可以幫助你。

無論何時使用FormHelper-> create()方法,都會生成隱藏的輸入字段以覆蓋默認的HTTP方法。您也可以通過傳遞type option來更改它。請問如果它不適合你。

+0

我會稍後再嘗試,但我不會覆蓋任何內容。注意表單方法屬性已經是'post'。 – 2012-07-20 21:06:28

+0

這不起作用,隱藏字段仍然顯示 – 2012-07-21 01:50:00

0

嘗試:

echo $this->Form->create('User', array(
'inputDefaults' => array(
    'div' => false 
    ) 
)); 

的DIV不會對形式的任何輸入來創建。

+0

隱藏字段的div被硬編碼爲使用div。 – tigrang 2012-07-20 18:58:18

2

對於任何人最近來到這裏,現在有一個簡單的解決方案,不涉及自定義幫手。使用FormHelper templates,有問題的代碼塊由'hiddenBlock'模板生成。 (請參閱此處默認模板的完整列表:https://api.cakephp.org/3.2/class-Cake.View.Helper.FormHelper.html#%24_defaultConfig)。

因此,修改CakePHP的文檔中給出的示例,以配合這種情況下,取下包裹<div>隱藏<input>周圍_method(假設HTML5):

// In your View class 
$this->loadHelper('Form' , [ 'templates' => 'app_form' ]); 


// in config/app_form.php 
return [ 
    'hiddenBlock' => '{{ content }}' 
]; 

我是因爲我最近遇到這個問題實現了不允許內聯樣式的內容安全策略,我想我應該分享我的工作解決方案。