3

使用 FormHelper->create(...) 时,呈现的 HTML 如下所示:

<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 内的隐藏输入都出现了。他们似乎没有必要,因此我不希望他们在那里。

4

5 回答 5

2

对于最近遇到此问题的任何人,现在有一个简单的解决方案,不涉及自定义助手。使用FormHelper 模板,有问题的代码块由“hiddenBlock”模板生成。(在此处查看默认模板的完整列表:https ://api.cakephp.org/3.2/class-Cake.View.Helper.FormHelper.html#%24_defaultConfig )。

因此,要修改 CakePHP 文档中给出的示例以匹配这种情况并删除隐藏的 _method<div>周围的包装(假设 HTML5):<input>

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


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

我遇到了这个问题,因为我最近实施了一个不允许内联样式的内容安全策略,我认为我应该分享我的工作解决方案。

于 2017-01-05T16:05:49.190 回答
1

div 是有效的 HTML。

在 HTML5 之前,非块级元素(例如)在标签<input>内直接无效。来源<form>

编辑:要回答你的问题,你不能轻易摆脱它。它被硬编码到 FormHelper::create() 中,您必须在自定义帮助程序中覆盖该方法。为什么它仍然困扰着你?

于 2012-07-20T02:32:32.930 回答
0

此链接可能会对您有所帮助。

每当您使用 FormHelper->create() 方法时,都会生成一个隐藏的输入字段来覆盖默认的 HTTP 方法。您也可以通过传递type option来更改它。请询问它是否不适合您。

于 2012-07-20T04:30:33.173 回答
0

尝试:

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

不会在表单的任何输入上创建 div。

于 2012-07-20T08:17:24.787 回答
-1

使用 hiddenField => false 属性

于 2012-07-20T03:09:38.460 回答