Yii2:如何根据网址路由显示不同的布局?

时间:2017-12-15 15:17:26

标签: php yii2 accelerated-mobile-page

我想开始为Google使用AMP(加速移动页面),example.com/my-article等文章网址也必须以example.com/amp/my-article提供,但布局不同。

问题:我应该如何构建我的Yii2代码以显示不同的布局并为文章控制器制作网址路由规则?我提出的一些提示:

public function beforeAction($action)
{
    if (...) // ??
        $this->layout = 'amp';
    else
        $this->layout = 'main';

    return parent::beforeAction($action);
}

public function actionView($article_slug)
{
    $model = $this->findModel($article_slug);

    if ($this->layout == 'amp')
        $path = 'amp/view';
    else
        $path = 'html/view';

    return $this->render($path, [
        'model' => $model,
    ]);
}

config.php写什么?

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [

        // ??
        'amp/<article_slug:[\w\-]+>' => 'article/view',

        '<article_slug:[\w\-]+>' => 'article/view',
    ],
],

1 个答案:

答案 0 :(得分:0)

你可以在行动前做这样的事情

public function beforeAction($action)
{
    if (\Yii::$app->request->getQueryParam('amp')) {
        $this->layout = 'amp';
    else
        $this->layout = 'main';

    return parent::beforeAction($action);
}

并像这样配置URL管理器

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '<amp>/<article_slug:[\w\-]+>' => 'article/view',

        '<article_slug:[\w\-]+>' => 'article/view',
    ],
],