2013-04-26 82 views
1

我在這裏錯過了什麼。我有一幫的變量模型:YII:除非有規則,否則驗證不會填充模型?

class Car extends CFormModel 
{ 
    public $item1; 
    public $item2; 
} 

如果我發佈形式ITEM1 =「一個」和ITEM2 =「兩節」和我在控制器中的以下內容:

if(isset($_POST['Car'])) 
{ 

    $model->attributes = $_POST['Car']; 
    if($model->validate()) { 

     print_r($model); 
    ... 
... 

在打印模型的位置,沒有任何項目具有值。但我把它添加到我的模型中:

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

然後item1填充,但不是item2。那麼您如何獲得可選字段的值?

回答

2

如果您未將任何驗證規則分配給屬性,則此屬性爲「不安全」。如果財產是不安全的,那麼你不能在那裏分配任何東西,但是你可以直接分配變量。

$model->item1 = $_POST{'car']['item1']; 

如果您嘗試批量分配變量,您還應該在Yii跟蹤日誌中看到警告。

要讀取屬性,直接從產權

var_dump($model->item1); 
+0

所以,你必須應用驗證甚至可選字段讀它? – coderama 2013-04-26 12:28:27

+1

您可以將它們標記爲safe - array('item1,item2','safe');但驗證你的數據總是個好主意。 – 2013-04-26 12:38:06