YII:除非有规则,否则验证不会填充模型?

YII:除非有规则,否则验证不会填充模型?,yii,Yii,我错过了什么。我有一个模型,里面有很多变量: class Car extends CFormModel { public $item1; public $item2; } 如果我使用item1=“one”和item2=“two”发布表单,并在控制器中执行以下操作: if(isset($_POST['Car'])) { $model->attributes = $_POST['Car']; if($model->validate()) {

我错过了什么。我有一个模型,里面有很多变量:

class Car extends CFormModel
{  
  public $item1;
  public $item2;
}
如果我使用item1=“one”和item2=“two”发布表单,并在控制器中执行以下操作:

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

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

      print_r($model);
    ...
...
在打印模型时,所有项目都没有值。但我将此添加到我的模型中:

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

然后填充item1,但不填充item2。那么如何获取可选字段的值呢?

如果未为属性分配任何验证规则,则此属性是“不安全的”。如果属性不安全,则不能在那里批量分配任何内容,但可以直接分配变量

$model->item1 = $_POST{'car']['item1'];
如果您试图批量分配变量,您还应该在Yii跟踪日志中看到警告

要读取属性,请直接从属性中读取它

var_dump($model->item1);

因此,您甚至必须对可选字段应用验证?您可以将它们标记为safe-array('item1,item2','safe');但验证数据总是一个好主意。