2013-04-26 90 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