【问题标题】:Cakephp form never validates when it shouldCakephp 表单从不验证何时应该验证
【发布时间】:2013-11-16 03:02:02
【问题描述】:

好的,所以我的验证有点工作。它不验证何时应该,这似乎与我在谷歌上找到的所有问题都相反。我尝试从 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 函数的结果:

没有验证!Array ( [full_name] => Array ( [0] => 这个字段 不能留空)[密码] => 数组([0] => 该字段不能 留空 ) ) 数组 ( [User] => Array ( [full_name] => Sean Templeton [电子邮件] => sean@********.com [密码] => ******** [确认密码] => ******** ) )

【问题讨论】:

    标签: php validation cakephp


    【解决方案1】:

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

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

    更新:

    您的全名验证包含不包含空格的 'rule'=> 'alphaNumeric'。但是如果你检查你的数据 [full_name] => Sean Templeton 其中有一个空格。

    您可以在模型中设置自己的消息。我觉得没必要这么说。

    【讨论】:

    • 我做了...你没看我的帖子吗?我不仅阅读了它,还从中复制了代码。我就是无法让它工作。
    • 检查操作。我没有在表单中看到任何操作集。您如何编码调用注册操作?
    • CakePHP 使用正确的操作自动创建表单。具体来说,它会输出以下内容:&lt;form action="/users/signup" id="UserSignupForm" method="post" accept-charset="utf-8"&gt; 我不想听起来很粗鲁,但你对 CakePHP 了解很多吗?
    • 是的,你很粗鲁,但没问题。我最近开始在 Cake 上工作。所以知道的不多。我接受。但是,我想帮你。
    • 您的全名验证有 'rule'=> 'alphaNumeric' 不包括空格。但是如果你检查你的数据 [full_name] => Sean Templeton 其中有一个空格。我希望这次我没有错。
    【解决方案2】:

    在你的控制器中试试这个

    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));
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多