2

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

在此之前从相应的表中正确填充了两个 CActiveRecord 模型,它们具有正确的数据和所有内容。
两个模型的数据都存在于 $_POST 上,并由表单修改。
但似乎对属性属性的分配仅适用于 $profile 而不适用于 $resume。
如果我在分配后检查他们的值, $profile 不会从表单中获得编辑。模型的定义中是否有可能导致这种情况的东西?据我所见,两种模型的实现方式相似,
我不明白为什么会发生这种情况,有人知道吗?
谢谢!

4

2 回答 2

3

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

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

于 2010-07-21T11:46:41.020 回答
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(); ?>
于 2010-07-20T16:31:02.793 回答