【问题标题】:Yii: Controller action to handle record creation and updation in same action methodYii:控制器操作,以相同的操作方法处理记录创建和更新
【发布时间】:2012-10-12 19:21:07
【问题描述】:

对于某些基本功能,我无法在控制器中绘制操作布局。我有一个提供帐户基本信息的视图。帐户跨越许多领域,因此用户最有可能进行频繁保存。我所经历的是,每次我进行保存时,都会创建一个新行。 actionCreate 被调用,它只是将数据转储到表中。我一定要让用户在同一个界面上填写所有数据。

根据我目前收集到的信息,我无法为 actionCreate 方法设置动作参数,因为它失败了,因为它在第一次保存时为空。

按照我的 actionCreate 控制器方法中的代码 sn-p:

    public function actionCreate()
{
    $model=new Account;
    $accaddress=new AccAddress;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

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

        if($model->save()) //Account data saving

            if (isset($_POST['AccAddress'])){
            //Yii::log('Dumping infomration for multiple models.');
            $accaddress->attributes=$_POST['AccAddress'];
            $accaddress->acc_id=$model->id;


            if ($pataddress->save()){//Account address saving
            }
            //$this->redirect(array('create','id'=>$model->id));
            }
    }

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

焦急期待建议/cmets。提前致谢。

问候, 费萨尔

【问题讨论】:

  • 你需要发布代码才能看到你做错了什么,但是网上的任何教程都会在这个阶段帮助你。
  • @Pentium,请看一下,我刚刚添加了代码。
  • 您的 model::findByPk() 调用在哪里加载现有记录?
  • 这就是我尝试过的,但是对于每个保存操作,我都没有 ID,所以我无法查询。我刚收到约书亚的回复,我想我会试试他说的话....感谢您的及时回复。

标签: controller yii action


【解决方案1】:

看起来您正在使用 Gii 生成的代码,这很好。从您的帖子中有点不清楚到底出了什么问题,但这里有一些事情需要检查?

用户提交的数据是否存在不正确的问题,他们需要修复它吗?如果是这样,那么您需要使用validation rules

您是否使用相同的表单来创建和更新记录?如果是这样,那么您需要确保将 ID 作为隐藏表单字段包含在某处。当您运行 $model->attributes=$_POST['Account']; 时,它能够更新现有记录的唯一方法是,如果 ID 是 $_POST['Account'] 中遇到的字段之一。

是帐户地址的问题吗?例如,您是否尝试将多个帐户地址模型附加到一个帐户?如果是这样,您将需要在此处添加逻辑来处理多种可能的模型。

希望其中之一有所帮助。

【讨论】:

  • 感谢 Joshua,将 id 存储在隐藏变量中是有意义的,让我尝试一下然后返回......
  • 如果您使用 Gii 生成的代码,请确保也使用 Gii 生成的视图,因为它们可以完美地协同工作。
  • 我相信你建议的方法是正确的,但现在我又在绕圈子了。我设法将 Id 存储在隐藏变量中,但在下一次提交时,它未能设置 Id 属性,说它是“不安全的”。如果我让它安全,那么我就不会得到新的记录 ID,这样我就可以将它发送到隐藏变量。这对 Yii 来说有点奇怪,好吧,我将在 8-9 小时内继续我的工作,然后更新这个线程......同时,如果你碰巧遇到任何事情,请留言。非常感谢:)
  • 嗨 Joshua,我找到了解决方案。检查此链接yiiframework.com/forum/index.php/topic/…。睡不着所以回来了....一切顺利,非常感谢您的支持。
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多