Yii2: как показать разные макеты в зависимости от маршрута URL?

Я хочу начать использовать AMP (ускоренные страницы для мобильных устройств) для Google и ссылки на статьи, например example.com/my-article также должен быть доступен как example.com/amp/my-article, но другой макет.

Вопрос: Как мне структурировать свой код Yii2, чтобы он отображал разные макеты и определял правила маршрутизации URL для контроллера статей? Несколько советов, которые я сделал:

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',
],
],

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',
],
],
0

Другие решения

Других решений пока нет …