簡體   English   中英

如何在cakephp中分配模型和控制器的驗證?

[英]How to assign validations for model and controller in cakephp?

我正在開發一個注冊表格。但是我不知道如何在cakephp中對控制器類中的注冊表格進行驗證。

型號類別:

user.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'
        ),
);

**控制器類:

UserController.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');
            }
        }
    }
    }

Users.register視圖 * 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,用於其他原因。 使用'rule'=>'notEmpty',用於需要的輸入

  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. 刪除var $ name ='Users'; =>此行已默認設置

  6. 模型:變量應該是公共的

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM