2014-02-27 18 views
0

我有一個ProjectController和一個ClientController。重定向(返回)Yii中的另一個控制器

我想從項目_form.php中創建一個選項,在客戶端下拉菜單中有一個鏈接,該鏈接重定向到ClientController :: actionCreate,但傳遞給它一些變量以告知它是否來自ProjectController :: actionUpdate或:: actionCreate。

我是ClientController :: actionCreate做它的事情,然後,如果用戶通過ProjectController :: actionCreate OR :: actionUpdate到達那裏,將它們重定向回該頁面並在項目模型中設置client_id以匹配任何剛創建。

如果有人只是通過常規菜單添加一個新的客戶端,他們可以使用默認的重定向(我認爲它可以查看)。

在我_form.php這個我使用下面的代碼鏈接到客戶端:: 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

如果我正確理解你,那麼你需要區分不同的調用相同的controller.I假設你不使用YII生成的代碼來創建和更新,因爲如果調用是從更新view.Yii自動調用更新控制器。假設你使用自定義更新表單(不是由Yii生成,Yii也通過gii生成視圖)。你可以用這些方法做到這一點。

  1. 您可以在其中一個您想要區分的視圖中創建隱藏字段。假設在更新中你可以寫
    <?php echo CHtml::hiddenField('name' , 'update'); ?>
    這個值也會以表格形式提交。在你的控制器,你可以檢查這樣
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 
     } 
    } 

寫如果狀態傳遞給這個動作,然後$狀態將不能爲空,如果爲參數沒有通過那麼這將是空

+0

非常感謝。我想我已經明白了。只是爲了確定,這是否有意義? 添加兩個新變量對「創建」 在actionCreate分配$ _GET變量模型我的客戶模型(公共$地位,$ REDIR) 馬克那些2中的「安全」是安全的。 發佈後,檢查它們的值並根據我設置的任何邏輯將它們重定向回正確的動作/控制器/ ID。 我想了解,如果這是正確的方式使用Yii/MVC與您的建議上面。 – McB

+0

很高興幫助。對於你的問題,是的,你可以使用它。在那種情況下,我不認爲你需要宣佈它是安全的。只是不要把它放在「需要」的規則中。如果不需要,它不會打擾你。 –

相關問題