CakePHP $ this-> Plan-> validates()来自非模型表单的验证

时间:2011-02-02 23:49:58

标签: validation cakephp forms controller

我现在大部分时间都在这一天,而且我不能让这个工作在我的生活中(我可以让它工作1/2但不完全正确)。

基本上,我试图在搜索表单字段上使用验证,如下所示:

if(isset($search['ApplicantAge']) && !empty($search['ApplicantAge'])) {
        if ($this->Plan->validates()) { 
        $ApplicantAge = $search['ApplicantAge'];
        }
    } 

这是我的型号代码:

...

'ApplicantAge' => array(
'required' => true,
'allowEmpty' => false,
'rule' => 'numeric',
'message' => 'A valid Age is required. Please enter a valid Age.'),

...

验证工作正常但是当我输入一个数字(数字)时,它会显示我的错误!当它是空白时不显示错误,当我输入字母时,它似乎有效:(??

有没有人知道这种奇怪行为的伎俩?

4 个答案:

答案 0 :(得分:1)

尝试使用'notEmpty'规则而不是必需的/ allowEmpty规则。

'ApplicantAge' => array(
'applicant-age-numeric'=> array(
    'rule' => 'numeric',
    'message' => 'A valid Age is required. Please enter a valid Age.'
    ),
'applicant-age-not-empty'=> array(
    'rule' => 'notEmpty',
    'message' => 'This field cannot be left blank'
    )
)

答案 1 :(得分:0)

首先,您为什么要使用该领域' ApplicantAge'当公约说它应该是得分较低的情况下?

回答您的问题,进行验证的最佳方式是http://book.cakephp.org/view/410/Validating-Data-from-the-Controller

另一种选择是做$ this->模型 - >保存($ data,array('验证' =>'仅'));

答案 2 :(得分:0)

手册根本没有帮助我:(

但你对validate =>的建议只有数组似乎已经完成了这个伎俩。这就是我的工作方式:

plans_controller.php

if (isset($search['ApplicantAge'])) {
        $this->Plan->save($search, array('validate' => 'only'));
        if ($this->Plan->validates($this->data)) {
            $ApplicantAge = $search['ApplicantAge'];
        }
    }

plan.php(模特)

var $validate = array(
    'ApplicantAge'   => array(
        'applicant-age-numeric'   => array(
            'rule'    => 'numeric',
            'message' => 'A valid Age is required. Please enter a valid Age.'),
        'applicant-age-not-empty' => array(
            'rule'    => 'notEmpty',
            'message' => 'This field cannot be left blank'),
    ),

现在,如果ApplicateAge字段中未输入任何数据,则会显示正确的消息。如果输入非数字,则还会显示正确的消息。

这比我想象的更具挑战性!

答案 3 :(得分:0)

为了记录,我会对我之前接受的帖子进行更正。我几乎不知道validate =>只有在save()上才真正将数据保存到我的计划表中。

我能够使用set()使其正常工作。以下是完全解决问题的代码:

plans_controller.php

if (isset($search['ApplicantAge'])) {
        $this->Plan->set($this->data);
        if ($this->Plan->validates()) {
            $ApplicantAge = $search['ApplicantAge'];
        }
    }

plan.php(模特):

var $validate = array(
    'ApplicantAge'   => array(
        'applicant-age-numeric'   => array(
            'rule'    => 'numeric',
            'message' => 'A valid Age is required. Please enter a valid Age.'),
        'applicant-age-not-empty' => array(
            'rule'    => 'notEmpty',
            'message' => 'This field cannot be left blank'),
    )