我有一个ProjectController和一个ClientController。
我想从项目_form.php创建一个选项,在客户端下拉列表旁边有一个链接,重定向到ClientController :: actionCreate,但是传递了某种变量,让它知道它是否来自ProjectController :: actionUpdate或:: actionCreate。
我是ClientController :: actionCreate来做它的事情,然后,如果用户通过ProjectController :: actionCreate OR :: actionUpdate到达那里,将它们重定向回那个页面并在项目模型中设置client_id以匹配任何只是创建。
如果有人只是通过常规菜单添加新客户端,他们可以使用默认重定向(我认为可以查看)。
在我的_form.php中,我使用以下代码链接到client :: actionCreate
<?php echo " ".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的新手,不知道实现这一目标的最佳方法是什么。
答案 0 :(得分:1)
如果我理解正确,那么你需要区分对同一个控制器的不同调用。我想你没有使用YII生成的代码来创建和更新,因为如果调用来自更新视图,yii会自动调用更新控制器。我想您正在使用自定义更新表单(不是由Yii生成,Yii也通过gii生成视图)。你可以用这些方式做到这一点。
<?php echo CHtml::hiddenField('name' , 'update'); ?>
强> if(isset($_POST['name'])) { //do something here }
<?php echo " ".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