将Yii中的表单数据转换为CActiveRecord模型适用于一个模型,但不适用于另一个模型

时间:2010-07-19 17:44:46

标签: activerecord forms model yii

我以这种方式收到提交的表格:
$resume->attributes = $_POST['ResumeModel'];
$profile->attributes = $_POST['UserProfile'];

CActiveRecord模型在此之前已从相应的表中正确填充,它们具有正确的数据和全部。
两个模型的数据都存在于$ _POST中,并由表格修改 但似乎对属性属性的赋值仅适用于$ profile而不适用于$ resume 如果我在分配后检查其值,$ profile不会从表单中获取编辑。 模型的定义中是否有某些东西可以导致这种情况?据我所知,这两个模型都是类似的实施 我不明白为什么会这样,有人有线索吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

问题是$ resume模型上的某些字段没有任何验证规则,也没有被声明为安全,因此无法安全地批量分配。

参考: http://www.yiiframework.com/doc/guide/form.model#securing-attribute-assignments

答案 1 :(得分:2)

你仔细检查了$ _POST变量吗?要使质量“属性”赋值起作用,数组应采用以下形式:

$_POST = (
  'ResumeModel' => (
    'data1' => 'something',
    'data2' => 'something else',
  ),
  'UserProfile' => (
    'data3' => 'yo ho ho',
    'data4' => 'bottle of rum',
  )
)

如果它看起来像这是错误的:

$_POST = (
  'ResumeModel' => (
    'data1' => 'something',
    'data2' => 'something else',
    'data3' => 'yo ho ho',
    'data4' => 'bottle of rum',
  )
)

要确保表单为每个模型构建正确的$ _POST数组,请确保将$ resume和$ profile模型同时传递到表单中,如下所示:

<?php 
$resume=new ResumeModel;
$profile=new UserProfile;
$this->render('yourFormView', array('resume'=>$resume,'profile'=>$profile));
?>

然后,在“yourFormView”中,确保您正在为每个模型正确创建表单字段,如下所示:

<?php $form=$this->beginWidget('CActiveForm'); ?>
<?php echo $form->textField($resume,'data1'); ?>
<?php echo $form->textField($resume,'data2'); ?>
<?php echo $form->textField($profile,'data3'); ?>
<?php echo $form->textField($profile,'data4'); ?>
<?php $this->endWidget(); ?>