Yii 2 статических страницы

Я не могу показывать статические страницы. Попробуйте сделать это, как описано в doc здесь - http://stuff.cebe.cc/yii2-guide.pdf (на странице 100), но когда я включаю prettyurl, это не работает.

Добавлено в правила urlManager:

'urlManager' => array(
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => array(
        '' => 'site/index',
        'login' => 'site/login',
        'contacts' => 'site/contact',
        '<view:(break)>'=>'/site/page?&view=<view>',
    ),
),

Затем в SiteController добавлено:

public function actions()
    {
        return [
            ...
            'page' => [
                'class'=>'yii\web\ViewAction',
            ],
        ];
    }

А потом создали представления /site/pages/break.php

<h1>View static page Break</h1>

Но я получаю сообщение об ошибке:Не найдено (#404) Невозможно разрешить запрос: сайт / страница?& View=break

Если я отключу prettyUrl:

//'enablePrettyUrl'=>true

тогда я могу видеть мою страницу, набрав url: index.php?r=site/page&view=break

Что не так с ViewAction?

4 ответа

Я думаю, что вы делаете правила, часть вашего URL управляется неправильно. Попробуй это

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    // Disable index.php
    'showScriptName' => false,
    // Disable r= routes
    'enablePrettyUrl' => true,
    'rules' => array(
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    ),
    ],

Часть правил должна быть важной.

Я решил свою проблему. используйте такие строки:

'<view:(break)>' => 'site/page',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',

Я заставляю использовать конкретное имя страницы для просмотра, в моем случае это "перерыв", потому что не могу использовать это

'<view:[a-zA-Z0-9-]+>' => 'site/page',

(это вызывает сбой других правил.) Я думаю, что это может лучше создать "собственный класс правил", расширяющий UrlRule, но думаю, что теперь мне это не нужно.

Я пробовал этот способ (без спецификации правил):

        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
    ],

Решение простое:

  1. код web.php такой 'rules' => [
    'site/page/<view:[a-zA-Z0-9-]+>' => 'site/index',

  2. В SiteController не используйте функцию actions(), вместо этого:

public function actionIndex ($view) { return $this->render('/site/pages/' . $view); } catch (InvalidParamException $e) { throw new HttpException(404); },

  1. Если view contacts.php существует в views /site/pages /, URL является yourdomain / basic / web /site/page / contact

4.Спасибо Самдарку и его статье https://github.com/yiisoft/yii2/issues/2932

Другие вопросы по тегам