[英]In cakephp, how do I access model fields inside custom validations of other model fields?
[英]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時自動進行驗證
在您的模型代碼中.....
當您要保存數據時,需要分配驗證。 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 } } }
在某些情況下,例如創建或更新,您需要設置要分配驗證行為的位置。 例如保存時創建或更新。
在您的模型中, 'required'=>true,
用於其他原因。 使用'rule'=>'notEmpty',用於需要的輸入
您的表單對於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'));?>
刪除var $ name ='Users'; =>此行已默認設置
模型:變量應該是公共的
var $name='User'; var $validate= array(); //change them to public $name='User'; public $validate= array();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.