控制器动作与不同的渲染视图基于比赛页面

时间:2015-10-16 10:06:44

标签: yii2

我有一个控制器动作,可以在我的应用程序的不同位置调用。 是否可以根据来电者页面呈现不同的视图?

public function actionMyaction($id){

   // blar, blar

   if (/* if I'm calling this action from index */) {
       return $this->redirect(['index']);
   }
   else{
       return $this->redirect(['update']);
   }

}

4 个答案:

答案 0 :(得分:1)

尝试类似的事情,

if($model->isNewRecord) 
  return $this->render('create', ['model' => $model]);  
else
  return $this->render('update', ['model' => $model]);

答案 1 :(得分:0)

是的,通过"来电者页面"我认为你的意思是推荐人。

class ExampleController extends Controller {

    private function handleRedirect() {
        $referrer = $_SERVER["HTTP_REFERER"];
        if (!empty($referrer)) {
            switch ($referrer) {
                case "blar": return $this->redirect("blar");
            }
        }
        $this->redirect("foo");
    }
    public function actionMyaction() {
        // ... blar
        return $this->handleRedirect();
    }

}

如果没有,那么也许你的意思是行动是差异化因素:

class ExampleController extends Controller {

    private function handleRedirect() {
        switch (\Yii::$app->controller->action->id) {
                case "myaction": return $this->redirect("blar");
            }
        $this->redirect("foo");
    }
    public function actionMyaction() {
        // ... blar
        return $this->handleRedirect();
    }

}

如果没有,那么请澄清你的问题!

答案 2 :(得分:0)

您可以使用:

Map<String, List<String>> result = source.stream()
    .map(s -> s.split("-"))
    .collect(Collectors.groupingBy(a -> a[0], 
        Collectors.mapping(a -> a[1], Collectors.toList())));

或:

$this->redirect(Yii::$app->request->referrer);

根据PHP文档,$ _SERVER [“ HTTP_REFERER”]并不总是值得信任的:

PHP $_SERVER

编辑:当然,您将获得更多的收益,即Yii团队可以实际拼写“引荐来源网址”,而您的大脑不必为拼写错误的HTTP版本大喊大叫。

答案 3 :(得分:0)

也许您需要这样的东西:

public function actionMyaction($id){

   // blar, blar

    $referrer = Yii::$app->request->referrer;
    $action = explode('/', $referrer);

        switch (end($action)) {
            case 'index':
                return $this->redirect(['index']);
                break;

            case 'update':
                return $this->redirect(['update']);
                break;

            default:
                break;
        }
}