CakePHP 2.3.1在某些视图中停用表单验证

时间:2013-03-19 16:36:11

标签: forms validation cakephp cakephp-2.3

Cookbook为版本2.3引入了停用表格强制取消的可能性。或者至少我理解为: Quote:来自http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html

  

“版本2.3中的新内容。

     

从2.3开始,HTML5 required属性也将添加到输入中   基于验证规则。您可以明确设置所需的密钥   options数组为字段覆盖它。跳过浏览器验证   触发整个表单,您可以设置选项'formnovalidate'=>   对于使用FormHelper :: submit()或生成的输入按钮,则为true   设置'novalidate'=>在FormHelper :: create()的选项中为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提供此选项时,我很乐意使用它。

Calamity Jane

4 个答案:

答案 0 :(得分:7)

所以我猜我发现了问题并至少让一个人工作了:

我现在使用的是:

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

我想我的预期是字段不会标有fat标签和星号。那些仍在那里,但不管你不用再填写它们了。而我测试的时间确实提交了表格,我想我有99个vacrations中的一个,这是非常错误的。

如果这让我感到高兴是我的决定,但显然我可以关闭HTML5验证。 如果我想让标签不是大胆的&星号,还有一个选项吗?

Calamity Jane

答案 1 :(得分:1)

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

的操作

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

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

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

而不是通常的方式:

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

答案 2 :(得分:0)

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

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

标签不是粗体&amp;星号,

<?php echo $this->Form->input('myinput', array('required' => false));

答案 3 :(得分:0)

在我的情况下,我使用按钮来提交表单。这让我更具灵活性。在那种情况下,我使用了属性&#39; formnovalidate&#39;传递按钮的选项数组。表单看起来如下所示:

<?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();