Cakephp表单永远不会验证它应该什么时候

时间:2013-11-16 03:02:02

标签: php validation cakephp

好的,所以我的验证有点有效。它不会验证它应该什么时候,这似乎与我在谷歌上可以找到的每个问题相反。我已经尝试从CakePHP文档中复制确切的代码,但它似乎不起作用。也许这里有人能搞清楚。

型号:

<?php

    App::uses('AppModel', 'Model');

    class User extends AppModel {

        public $validate = array(
            'email' => array(
                'rule' => 'email',
                'required' => true,
                'allowEmpty' => false
            ),
            'full_name' => array(
                'rule'     => 'alphaNumeric',
                'required' => true,
                'allowEmpty' => false
            ),
            'password' => array(
                'rule' => array('minLength', 8),
                'required' => true,
                'allowEmpty' => false
            )
        );

    }

?>

控制器:

<?php

    App::uses('AppController', 'Controller');


    class UsersController extends AppController {

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

        function signup() {
            $this->layout = 'signin';

            if($this->request->is('post')) {

                $this->User->set($this->request->data);

                if($this->User->validates())
                    $this->Session->setFlash('Validated!');
                else
                    $this->Session->setFlash('Did not validate!' . print_r($this->User->validationErrors, true) . print_r($this->request->data, true));
            }
        }
    }

?>

查看:

<div class="placeholder text-center"><i class="fa fa-pencil"></i></div>

<?php echo $this->Session->flash(); ?>
<div class="panel panel-default col-sm-6 col-sm-offset-3">

    <div class="panel-body">
        <?php echo $this->Form->create('User'); ?>

            <div class="form-group">
                <?php echo $this->Form->input('full_name', array('placeholder' => 'Your full name', 'class' => 'form-control')); ?>
            </div>

            <div class="form-group">
                <?php echo $this->Form->input('email', array('placeholder' => 'Enter email', 'class' => 'form-control')); ?>
            </div>

            <div class="form-group">
                <?php echo $this->Form->input('password', array('placeholder' => 'Password', 'class' => 'form-control')); ?>
            </div>

            <div class="form-group">
                <?php echo $this->Form->input('confirm_password', array('placeholder' => 'Retype Password', 'class' => 'form-control')); ?>
            </div>

            <button type="submit" class="btn btn-primary btn-block">Create Account</button>

        <?php echo $this->Form->end(); ?>
    </div>
</div>

对正确方向的任何帮助表示赞赏。我总是遇到使用CakePHP进行验证的问题,所以我以前从未使用它。现在它是必需的,所以我别无选择,只能努力钻研这个,直到我开始工作。

哦,我应该注意数据确实存在。这是print_r函数的结果:

  

未验证!数组([full_name] =&gt;数组([0] =&gt;此字段   不能留空)[密码] =&gt;数组([0] =&gt;此字段不能   留空))数组([用户] =&gt;数组([full_name] =&gt;肖恩   Templeton [email] =&gt; sean@{{{} }.com [密码] =&gt; ********   [confirm_password] =&gt; ********))

2 个答案:

答案 0 :(得分:1)

请浏览此链接。它解释了cakephp验证的工作原理。

http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html

<强>更新

您的全名验证有'rule'=&gt; 'alphaNumeric',不包含空格。但如果你检查你的数据[full_name] =&gt;肖恩邓普顿有一个空间。

您可以在模型中设置自己的消息。我认为我不需要这样说。

答案 1 :(得分:0)

在你的控制器中试试这个

function signup() {
     $this->layout = 'signin';
     if ($this->request->is('post')) {
         $this->User->create($this->request->data); //"create" instead of "set"
         if ($this->User->validates())
             $this->Session->setFlash('Validated!');
         else
             $this->Session->setFlash('Did not validate!' . print_r($this->User->validationErrors, true) . print_r($this->request->data, true));
        }
    }
}