下拉列表中的模型属性未传输

时间:2013-03-17 08:17:49

标签: php forms drop-down-menu model yii

我有一个resume表,其中包含({1}}列position_type_id列,该列是position_type表的外键。

resume创建表单中,position type下拉列表的选项从position_type表中正确提取,并将其ID设置为选项的值。一切似乎进展顺利。

提交表单时,我可以验证值是否在POST变量中返回控制器,但是它们不会传递到具有属性population的模型中:

$model->attributes=$_POST['Resume'];

以下是控制器上的create方法:

public function actionCreate()
{
    $model=new Resume;

    if(isset($_POST['Resume']))
    {
        $model->attributes=$_POST['Resume'];

        if($model->save())
        {
            $this->redirect(array('view','id'=>$model->id));
        }   
    }

    $this->render('create',array(
        'model'=>$model,
    ));
}

以下是从相关模型加载密钥的表单:

echo $form->activeDropDownList(
    $model,
    'position_type_id',
    CHtml::listData(PositionType::model()->findAll(),'id','name')
);

position_type_id是简历模型上的键,它将外键携带到PositionType模型。它在表单和简历模型上拼写相同。模型的关系是:'positionType' => array(self::BELONGS_TO, 'PositionType', 'position_type_id'),

我想我可以从POST数组中获取每个值并手动设置它们,但似乎这应该“正常工作”。设置属性后$model上的值对于手动输入的字段是有的,对于来自生成的下拉列表的所有字段都是空白的。

以下是实际生成的内容:

<select name="Resume[position_type_id]" id="Resume_position_type_id">
    <option value="1">English Teacher</option>
    <option value="2">School Administrator</option>
</select>

1 个答案:

答案 0 :(得分:0)

我可能错了,但对我来说,大规模的任务不起作用。在yii中,如果我们需要对其执行大量赋值,则需要将属性声明为安全。

因此,在您的模型Resume中,您是否有以下规则:

public function rules() {
    return array(
        //the other rules ...
        array('position_type_id, others_attributes', 'safe'),
        //the rule above indicate the attributes that can be massively assigned
    );
}

A link to the wiki about the 'safe' validation rule