Yii2:如何使用 UrlManager 重定向到?

sir*_*jay 5 php yii2 yii2-advanced-app

在我的 Yii2 配置中,我有:

'components' => [
    'urlManager' => [

        'baseUrl'         => '',
        'enablePrettyUrl' => true,
        'showScriptName'  => false,

        'rules' => [
            'search' => 'site/index',
            ...
        ],
    ...
Run Code Online (Sandbox Code Playgroud)

如果我去site.com/search它工作。如果我去site.com/site/index它也可以工作并显示相同的内容。如何重定向呼叫而不是仅显示站点/索引的响应?它还必须使用参数(site.com/site/index?param=1-> site.com/search?param=1)重定向

rob*_*sch 5

UrlManager 不会重定向。而是像 Web 服务器一样进行重写。它被称为路由

如果您想在代码中进行重定向,可以使用Response::redirect(). 如果您没有SearchController可以将此语句放入操作的位置,则可以将其放入beforeAction事件中。您可以在配置数组中执行此操作:

选项1

[
    'components' = [
        ...
    ],
    'on beforeAction' => function ($event) {
        if(Yii::$app->request->pathInfo === 'search') {
            $url = 'site/index?' . Yii::$app->request->queryString;
            Yii::$app->response->redirect($url)->send();
            $event->handled = true;
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

选项#2

或者,如果您有SearchController使用:

class SearchController extends \yii\web\Controller {
    public function actionIndex() {
        $url = 'site/index?' . Yii::$app->request->queryString;
        return $this->redirect($url);
    }
}
Run Code Online (Sandbox Code Playgroud)

选项#3

第三个选项是配置 Web 服务器来执行重定向。那将是最快的解决方案