2011-08-23 26 views
0

動態編輯驗證規則,我在我的模型驗證規則:如何在Yii中

public function rules() 
{ 
    return array(){ 
    array('order', 'required'), 
    } 
} 

我在我的訂單查看有沒有輸入文本元素:

input type="text" name="order1" 

當我按下一個按鈕,我的輸入文本元素增加了,所以現在我有2個不同名稱的輸入文本元素。 e.g:

input type="text" name="order1" 
input type="text" name="order2" 

我的問題是: 如何動態編輯驗證規則,所以,當「order1」或「order2」爲空,也有驗證消息。謝謝。

回答

3

我會有不同的方法來解決這個問題。而不是輸入名稱= order1,order2,orderN,有這樣一個數組<input type="text" name="orders[]" />而在模型中,總是期望數組的訂單,循環它,如果任何項目不驗證,添加一個錯誤。

class SomeModel 
{ 
public $orders; 
public function rules() 
{ 
    return array(
    array('orders', 'validateOrders'), 
); 
} 

public function validateOrders($attribute, $params) 
{ 
    foreach($this->orders as $order) 
    if (empty($order)) { 
    $this->addError('orders', 'There is an empty order'); 
    break; 
    } 
} 
} 

上面的代碼是在這裏寫的,沒有經過測試,但應該密切顯示我的想法。

+0

謝謝!我不知道Yii可能會有這樣的事情。我仍然是初學者:) –

+0

你甚至不需要括號是誠實的,它將成爲一個數組,無論它被稱爲假設有兩個同名的輸入。 –

+0

這是正確的。但是明確地寫這樣的輸入對於PHP開發人員來說是非常有用的,可以理解你的意圖:) – ddinchev