2014-02-27 6 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

Если вы правильно поняли, тогда вам нужно различать разные вызовы с тем же контроллером. Предположим, вы не используете код, созданный и обновляемый YII, для создания и обновления, поскольку yii автоматически вызывает контроллер обновления, если вызов был вызван обновлением. I предположим, что вы используете пользовательскую форму обновления (не генерируемую 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

Большое спасибо за это. Думаю, у меня это есть.Просто чтобы убедиться, что это имеет смысл? Добавить 2 новые переменные в моей модели Client (публичный $ статус, $ REDIR) Марк те 2, как сейф в «безопасной» на «Создать» В actionCreate присвоить переменные $ _GET модели. После публикации проверьте свои значения и перенаправите их обратно на правильное действие/контроллер/идентификатор на основе любой логики, которую я настроил. Я пытаюсь понять, правильно ли это использовать Yii/MVC с вашим предложением выше. – McB

+0

рад помочь. По вашему вопросу, да, вы можете это использовать. В этой ситуации я не думаю, что вам нужно объявить это безопасным. просто не ставьте его в «обязательные» правила. Это не беспокоит вас, если это не требуется. –

Смежные вопросы