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

nnt7mjpx  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(113)

我有一个resume表,其中有一个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>
wooyq4lh

wooyq4lh1#

我可能是错的,但对我来说,大规模赋值不起作用。在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

相关问题