Cakephp 2.3.9模型验证中的自定义消息不起作用

时间:2013-08-28 07:11:48

标签: cakephp cakephp-2.3

我在管理员面板登录中进行模型验证,因此只有两个字段的用户名和密码。验证工作正常,但我在模型中编写的自定义消息未显示。

模型

public $validate = array(
    'username' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'Please Enter Your Username'
        )
    ),
    'password' => array(
        'required' => array(
            'rule' => array ('notEmpty'),
            'message' => 'Please Enter Your Password'
        )
    )
);

控制器

function login(){
    $this->layout = 'admin_login';  

    if ($this->request->is('post')) {         
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        }
        $this->Session->setFlash(__('Invalid username or password, try again'));
    }
}

查看

echo $this->Form->create('Admin',array('autocomplete'=>"off"));

echo '<div style="width:294px;float:left;position:relative;">';
echo $this->Form->input('username' , array('label' => '', 'placeholder' =>'Enter your username','div' => false));
echo $this->Form->input('password' , array('label' => '', 'value' =>'', 'div' => false,'placeholder'=>'Enter Your Password'));
echo '</div>';
echo '<div style="padding-left:0px;">'; 

echo $this->Form->end(__('Login' ,true));   

enter image description here

我已经尝试过这个链接中提到的一些内容,但它对我不起作用。

CakePHP : Validation message not displaying

3 个答案:

答案 0 :(得分:0)

这看起来像来自浏览器而不是CakePHP的消息。

CakePHP现在添加了一个必需属性,现代浏览器可以使用该属性来触发错误。

你可以在这里做三件事之一:

一:设置表单以将验证留给服务器:

 $this->Form->create(array('novalidate'=>true));

二:在浏览器中设置自定义验证消息:http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#dom-cva-setcustomvalidity

三:容忍它

答案 1 :(得分:0)

您收到该消息是因为“用户名”字段被标记为“必需”。也许您没有在Form-&gt; input()函数中定义它,但是已经从模型中自动添加了“required”标志(由于您的验证规则)。正如timstermatic所说,这是由必需属性引起的浏览器验证消息。

要解决此问题(并显示CakePHP验证消息),您必须强制避免在您的字段上添加“必需”标记:

$this->Form->input('username', array('required' => FALSE));

这将覆盖模型自动添加。快乐的编码;)

*已编辑=&gt;重要的是要澄清内联覆盖仅删除字段上所需的标志:无论如何,您将利用模型验证(仅因为如果向服务器发送空字段,它将不会传递您输入的验证规则。

答案 2 :(得分:0)

保留此代码,它将绕过html5验证并添加您的自定义验证

查看 echo $this->form->create('Post',array('action'=>'add'));
echo $this->form->input('title'); echo $this->form->input('body'); echo $this->form->submit('Save Post',array('formnovalidate'=>true)); echo $this->form->end();//Creates ending form tag

<强>模型 var $validate=array(
'title'=>array(
'title_must_not_be_empty'=>array('rule'=>'notEmpty','message'=>'Please enter a title),
        'title_must_be_unique'=>array('rule'=>'isUnique','message'=>'Title name already exists') ),
        'body'=>array( 'body_must_not_be_empty'=>array( 'rule'=>'notEmpty', 'message'=>'Please enter body' ) ) );

这将按你想要的方式工作