2014-02-28 37 views
1

我在cakephp中使用'MultivalidatableBehavior'。雖然它與以前的版本很好地工作。但它不適用於CakePHP 2.4.0版本。他們對這種行爲有什麼改變。因爲當我使用這個代碼。帶有cakephp 2.3.0的多值可行性行爲。不工作

var $ validationSets = array('ruleset in it。');

雖然我的請求經歷了行爲類,但它沒有將驗證放在所需的字段上。我也檢查了$this->request->data它也是有效的,並且對於規則集已寫入的相同模型。

我嘗試在我的MultivalidatableBehavior類中使用die進行調試。雖然在valiation期間,我的請求屬於setValidation(&$model, $rules = array()) {的功能。請建議它是否與更高版本的cakephp2.3兼容。

我試圖代碼..

型號代碼:

var $actsAs = array('Multivalidatable'); 
var $validationSets = array(
     'login' => array(
      'username' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Username is required !!')), 
      'password' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Password is required !!')), 
     ), 
    ); 

控制器呼叫。

$this->User->setValidation('login'); Fields are also with same name. 

它不驗證如果我把if($this->User->setValidation('login'))它返回false。

+0

定義「不工作」。 – burzum

+0

對不起,我沒有得到你。 – Sankalp

+0

你說「它不工作」,這是一個非常糟糕的問題報告:什麼是不工作?描述你已經嘗試了什麼,以及這次嘗試的結果是什麼。顯示任何錯誤消息。正確的問題報告的基礎。它不驗證並不一定意味着它是行爲。例如,添加一個單元測試來驗證或僞造。 – burzum

回答

1

感謝Piotr Beschel幫助我。我不應該使用任何形式的行爲。它也可以沒有行爲地實現。我的模型代碼將是

public $validationAdmin = array(
     'adminLogin' => array(
      'username' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Please enter your username !!')), 
      'password' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Please enter your password !!')), 
     ), 
     'adminForgotPassword' => array(
      'email' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Please enter your email address !!'), 
       'email' => array('rule' => array('email'), 'message' => 'Please enter valid mail address')), 
     ), 
    ); 

那簡直是創建一個名爲$ valdiationAdmin我已經將其命名爲管理員知道下面的規則集是admin變量。

我的示例控制器代碼會。

$this->Admin->validate = $this->Admin->validationAdmin['adminLogin']; 

就這樣。如果表單有數據保存,它會像黃油一樣移動。如果數據只是驗證我必須強制形式來驗證它(如果登錄數據未保存)。

if ($this->Admin->validates()) { 
} else { 
     $errors = $this->Admin->validationErrors; 
     $this->set('validationErrors', $errors); 
} 

它會驗證我的表單。即使在ctp文件中添加錯誤信息以形成字段。我需要而不是來寫$ this-> form-> error('fieldname');

再次感謝所有的觀衆。如果更好,建議我一些事情。我想要驗證其他形式的數據,如果與一個表單關聯,並且具有相同的實現。如果可以,請幫忙。

0

方法

$this->User->setValidation('login') 

僅選擇其中的驗證集將被使用。

用途:

if ($this->User->validates()) { 
    ... 

得到驗證的結果。

+0

但以前當我使用'$ this-> User-> setValidation('login')'它會自動驗證我的表單。我將來需要做什麼,我需要首先選擇驗證,然後使用'$ result = $ this-> User-> validates();'驗證它。 – Sankalp

+0

是的。查看多值可行性示例,調用setValidation()的返回值不會被保留,也不會被檢查。 該方法本身並不返回任何值。 – savedario