【问题标题】:Getting form data in Yii to a CActiveRecord model works for one model but not for another将 Yii 中的表单数据获取到 CActiveRecord 模型适用于一个模型,但不适用于另一个模型
【发布时间】:2010-07-19 17:44:46
【问题描述】:

我正在以这种方式获取提交的表单:
$resume->attributes = $_POST['ResumeModel'];
$profile->attributes = $_POST['UserProfile'];

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

【问题讨论】:

    标签: activerecord forms model yii


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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(); ?>
      

      【讨论】:

      • 谢谢!表格格式正确。问题是模型上的某些字段没有任何验证规则,也没有在模型上声明为“安全”,所以这就是为什么没有批量分配。
      • 啊,当然。很高兴你明白了!也许您应该将自己的答案标记为正确答案。欢呼
      猜你喜欢
      • 2019-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多