如何在 cakephp 中为模型和控制器分配验证


How to assign validations for model and controller in cakephp?

我正在开发一个寄存器表单,但我不知道如何在 cakephp 中对控制器类中的寄存器表单进行验证。

型号类别:

用户.php

<?php
class User extends AppModel
{
var $name='User';
//var $useTable = false;
var $validate= array(
        'username'=>array(
                'rule'=>'notEmpty',
                'required'=>true,
                'message'=>'Enter your name'
        ),
        'email'=>array(
                'email'=>array(
                        'rule'=>'email',
                        'message'=>'Enter a valid emial address'
                ),
                'email'=>array(
                        'rule'=>'notEmpty',
                        'required'=>true,
                        'message'=>'Enter your email address'
                )
        ),
        'password'=>array(
                'alphaNumeric' => array(
                        'rule' => 'alphaNumeric',
                        'required' => true,
                        'message' => 'Alphabets and numbers only'
                ),
                'password' => array(
                        'rule' => array('minLength', '8'),
                        'message' => 'Minimum 8 characters long'
                ),
               ),
        'firstname'=>array(
                'rule'=>'notEmpty',
                'required'=>true,
                'message'=>'Enter your firstname'
        ),
        'lastname'=>array(
                'rule'=>'notEmpty',
                'required'=>true,
                'message'=>'Enter your lastname'
        ),
);

**控制器类:

用户控制器.php**

<?php
class UsersController extends AppController
{
    var $name = 'Users';    
    function send(){
        if(!empty($this->data)){
            $this->User->set($this->data);
            if($this->User->validates()){
                if(!empty($this->data['User']['username'])) {
                    $this->username->from = $this->data['User']['username'] ;
                }
                else{
                    $this->username->from = $this->data['User']['username'] .
                    ' <' . $this->data['User']['username'] . '>';
                    $this->render('success');
                }
            }
            else {
                $this->render('register');
            }
        }
    }
    }

用户注册视图*注册.ctp*

<h3>Registration Form<h3>
    <form action="../users/register" method="POST" name="form">
    UserName:<input type="text" name="username">
    Password:<input type="password" name="password">
    Email:<input type="text" name="email">
    FirstName:<input type="text" name="firstname">
    LastName:<input type="text" name="lastname">
    <input type="submit" value="Register">
    </form>

请帮助我如何在 CakePHP 中进行验证。

创建一个名为 register() 的操作并创建视图 register.ctp。您的注册代码看起来像这样 -

function register(){
    if(!empty($this->data)){
        $this->User->create();
        if($this->User->save($this->data)){
                 $this->Session->setFlash("User saved!");
                $this->redirect('/login');
            }
            else{
                 $this->Session->setFlash("Unable to save now, Try later!");
            }
        }
 }

现在,当您尝试保存数据时,如果在模型上定义验证规则,则数据将自动验证。

在你的

代码中,你还没有写任何用于保存数据的代码.....如果您要保存或编辑数据..您的模型将在您编写 var $validate
时自动处理验证在您的模型代码中...

  1. 如果要保存数据,则需要分配验证。 true 激活验证。 默认验证方式设置为 True。

    $this->User->save($this->data)
    //to 
    $this->User->save($this->data , true ) //or false - set the validation here
    // your function needs to be public    
    public function register(){
       if(!empty($this->request->data)){        
          if($this->User->save($this->request->data)){
                //save data
            else{
                //data didn't save
            }
        }
    }
    
  2. 在某些情况下,例如创建或更新,您需要设置要分配验证行为的位置。 例如,在创建或更新时保存。

  3. 在您的模型中,'required'=>true,用于其他原因。使用"规则"=>"不空",用于所需的输入

  4. 您的表单不是 cakephp 验证的标准:创建您的表单并输入基于 cakephp,这样您将拥有清晰的代码并使作业可用于您的验证

    <?php echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'register')));?>
            <fieldset>
                    <legend><?php echo __('Register User'); ?></legend>
                    <div class="seven columns">
            <?php
                    echo $this->Form->input('username');    
                    echo $this->Form->input('password');    
                    echo $this->Form->input('first_name');
                    echo $this->Form->input('last_name');
                    echo $this->Form->input('phone_number');
                    echo $this->Form->input('email');
                    echo $this->Form->input('address1');
                    echo $this->Form->input('address2');
            ?>
                    </div>
            </fieldset>
        </div>
    <?php echo $this->Form->end(__('Register'));?>
    
  5. 删除变量 $name = "用户"; =>此行已默认设置

  6. 模型:变量应该是公共的

    var $name='User';        
    var $validate= array(); 
    //change them to 
     public $name='User';        
     public $validate= array();