在Yii中重定向(返回)到另一个控制器

时间:2014-02-27 20:02:16

标签: php redirect yii

我有一个ProjectController和一个ClientController。

我想从项目_form.php创建一个选项,在客户端下拉列表旁边有一个链接,重定向到ClientController :: actionCreate,但是传递了某种变量,让它知道它是否来自ProjectController :: actionUpdate或:: actionCreate。

我是ClientController :: actionCreate来做它的事情,然后,如果用户通过ProjectController :: actionCreate OR :: actionUpdate到达那里,将它们重定向回那个页面并在项目模型中设置client_id以匹配任何只是创建。

如果有人只是通过常规菜单添加新客户端,他们可以使用默认重定向(我认为可以查看)。

在我的_form.php中,我使用以下代码链接到client :: actionCreate

<?php echo "&nbsp;".Chtml::link('+New client',array('client/create',array('redir'=>'project/'.Yii::app()->controller->action->id)));?>

目标是以某种方式告诉客户端控制器它需要将某些内容发送回项目/更新或项目/创建。

我想在ClientController :: actionCreate

中使用这样的代码
public function actionCreate()
{
$model=new Client;
...
....
if(isset($_POST['Client']))
{
    $model->attributes=$_POST['Client'];
    if($model->save())
    {
        if(!empty($model->redir)){
            $this->redirect(array($model->redir,'id'=>$model->id));
        } else {
            $this->redirect(array('view','id'=>$model->id));
        }
    }
}
...
....
}

我是Yii的新手,不知道实现这一目标的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么你需要区分对同一个控制器的不同调用。我想你没有使用YII生成的代码来创建和更新,因为如果调用来自更新视图,yii会自动调用更新控制器。我想您正在使用自定义更新表单(不是由Yii生成,Yii也通过gii生成视图)。你可以用这些方式做到这一点。

  1. 您可以在要区分的其中一个视图中创建隐藏字段。假设在更新中您可以写入 的 <?php echo CHtml::hiddenField('name' , 'update'); ?>
    这些值也将以表格形式提交。在您的控制器中,您可以像这样检查
  2. if(isset($_POST['name']))
    {
    //do something here
    }
    
    • 其次,您可以在链接中传递状态,例如
      

    <?php echo "&nbsp;".Chtml::link('+New
    > client',array('client/create',array('redir'=>'project/'.Yii::app()->controller->action->id,'status'=>'update')));?>
    


    在您的控制器中,您可以写为

      public function actionCreate($status=null)
        {
        if($status!=null)
         {
         //do something here
          }
        }
    

    如果状态传递给此操作,那么$ status将不为null,如果未作为参数传递,则它将为null