5

Cookbook 为 2.3 版引入了停用表单强制验证的可能性。或者至少我是这样理解的:引用:来自http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html

" 2.3 版中的新功能。

从 2.3 开始,HTML5 required 属性也将根据验证规则添加到输入中。您可以在选项数组中显式设置必需的键以覆盖它的字段。要跳过整个表单的浏览器验证触发,您可以为使用 FormHelper::submit() 生成的输入按钮设置选项 'formnovalidate' => true 或在 FormHelper::create() 的选项中设置'novalidate' => true。 "

在我的情况下,我从这个模型中搜索,当然用户不需要填写所有必填字段,例如添加数据集。所以我想停用我的搜索表单的验证。

我尝试了所有三种变体,但没有看到任何结果:在我的搜索表单中,创建的必填字段仍然是必填的。

我所做的那些尝试:

第一次尝试:

echo $this->Form->create('Partner', array('action' => 'search', 'novalidate' => true));

第二次尝试:

echo $this->Form->input('name', 
array('required' => false, 'value' => $this->Session->read('Searchparameter.name'))
);

第三次尝试:

 $this->Form->submit('Submit', array('formnovalidate' => true));
    echo $this->Form->end();

变化:

echo $this->Form->end(__('Submit'), array('formnovalidate' => true));

我理解错了什么?顺便说一句:我确实停用了缓存,所以这不应该是问题。

当然,我仍然可以使用旧的解决方法进行此验证,但是当 2.3 提供此选项时,我很乐意使用它。

灾难简

4

4 回答 4

7

所以我想我发现了问题并且至少有一个变化工作:

我现在使用的是:

echo $this->Form->create('Partner', array('action' => 'search', 'novalidate' => true));

我想我所期望的是这些字段不会被标记为胖标签和星号。这些仍然存在,但无论如何您都不必再填写它们了。我用真正提交的表格测试的时间我猜我有 99 种变化之一,这真的是错误的。

如果这让我高兴是我的决定,但显然我可以关闭 HTML5 验证。如果我想让标签不是粗体和星号,也有选择吗?

灾难简

于 2013-03-20T13:15:39.537 回答
1

解决方案实际上要简单得多。如果您想在特定视图中禁用验证,您实际上只需要在创建表单时引用一个不存在的模型。例如,您可以做类似的事情

echo $this->Form->create('PartnerSearch');

在您的控制器中,您可以通过以下方式访问表单字段:

$this->request->data["PartnerSearch"]["field"] 

而不是通常的方式:

$this->request->data["Partner"]["field"]
于 2013-09-14T02:20:50.643 回答
1

对我来说,跳过浏览器验证,是的,array('novalidate' => true)确实有效。

<?php echo $this->Form->create('MyModelName', array('novalidate' => true)); ?>

让标签不是粗体和星号,

<?php echo $this->Form->input('myinput', array('required' => false));
于 2013-10-12T05:33:55.033 回答
0

就我而言,我使用按钮提交表单。这让我有了更大的灵活性。在这种情况下,我使用 then 属性“formnovalidate”传递按钮的选项数组。表单如下所示:

<?php
echo $this->Form->create('yourCtrllerName',array('action'=>'actionInYourCtrller'));
echo $this->Form->input('your_field_pass',array('label'=>'pass','type'=>'password'));
....  other Form fields .....
echo $this->Form->button('Button Caption',
                          array('type'=>'submit',
                                'name'=>'keyInsideTheDataArrayForButtonData',
                                'formnovalidate' => true,
                                'value'=>'valueOfTheAboveKeyInTheDataArray',
                                'style'=>'<style you want to apply to button>',
                                ... other options if needed...
                                )
                         );
echo $this->Form->end();
于 2014-04-07T02:08:27.457 回答