我已經在CakePHP書籍/ API和StackOverflow上搜索了網絡,但似乎無法找到答案。我遇到的問題是用戶爲我正在構建的應用創建。我在我的控制器中添加了一些操作的密碼驗證規則,這些規則工作得很好 - 沒有任何問題,甚至Auth組件也很開心。我創建了一個與我的數據模型完美配合的change_password動作(就像in - changes實際發生的那樣),但是沒有驗證應用於它,即使我將表單字段命名爲與add動作完全相同。許多操作的CakePHP驗證規則
多個操作可以不共享相同的驗證嗎?我是否需要在change_password動作中稍微重命名我的表單ID,然後創建新的驗證變量以匹配這些變量?這對我來說似乎效率很低,但如果我必須走下這條路,我會的。
非常感謝! John
編輯,現在添加代碼片段,因爲它看起來合適。
首先行動:
function change_password($id = null) {
if (!empty($this->data)) {
if (!empty($this->data['User']['passwd'])) {
$this->data['User']['password'] = $this->Auth->password($this->data['User']['passwd']);
}
if ($this->User->save($this->data)) {
$this->Session->setFlash('Password has been changed');
$this->redirect(array('controller' => 'bookings', 'action' => 'index'));
} else {
$this->Session->setFlash('Password could not be changed');
}
}
現在,驗證規則(再次指出的是,這些工作完全爲我添加動作,他們只是無法在change_password):
var $validate = array(
'first_name' => array(
'notempty' => array('rule' => array('notempty')),
),
'last_name' => array(
'notempty' => array('rule' => array('notempty')),
),
'email' => array(
'email' => array('rule' => array('email')),
),
'group_id' => array(
'numeric' => array('rule' => array('numeric')),
),
'active_user' => array(
'boolean' => array('rule' => array('boolean')),
),
'passwd' => array(
'rule' => array('minLength', '6'),
'message' => 'Password should be at least 6 characters long',
'required' => true,
'allowEmpty' => false,
'on' => 'create'
),
'passwd_confirm' => array(
'rule' => 'matchpwd',
'message' => 'Confirm password doesnt match'
),
);
function matchpwd($data){
if ($this->data['User']['passwd'] != $data['passwd_confirm']) {
return false;
}
return true;
}
最後,視圖(雖然我不認爲增加這個會有幫助,但我仍然會將它包括在內):
<div class="users form">
<?php echo $form->create('User', array('action'=>'change_password'));?>
<fieldset>
<legend><?php __('Change Password for "'.$User_to_change.'"');?></legend>
<?php
echo $form->input('id');
echo $form->input('passwd', array(
'type' => 'password')
);
echo $form->input('passwd_confirm', array(
'type' => 'password')
);
?>
</fieldset>
<?php echo $form->end('Submit');?>
</div>
我在下面的答案中引用了驗證,似乎是「半路工作」。當我嘗試在「passwd」表單域中輸入密碼但將「passwd_confirm」留空時,控制器的保存操作失敗,並看到「密碼無法更改」的閃存信息。所以顯然它在我的驗證規則中運行matchpwd函數。但是,爲這兩個框輸入空白值會成功,因此就好像它失敗了其他驗證規則。
(請原諒我,如果代碼縮進沒有出現正常。正如你所看到的,我有點StackOverflow上的n00b的)
糟糕!忘記說明我正在使用cakePHP版本1.3。如果它有幫助,我會提供代碼片段,但在這一點上,這更多的是一個理論問題:可以將驗證規則應用於多個操作? – SnoConeGod 2011-05-13 16:01:20