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'
],
Решение простое:
код web.php такой
'rules' => [
'site/page/<view:[a-zA-Z0-9-]+>' => 'site/index',В SiteController не используйте функцию actions(), вместо этого:
public function actionIndex ($view)
{
return $this->render('/site/pages/' . $view);
} catch (InvalidParamException $e) {
throw new HttpException(404);
}
,
- Если view contacts.php существует в views /site/pages /, URL является yourdomain / basic / web /site/page / contact
4.Спасибо Самдарку и его статье https://github.com/yiisoft/yii2/issues/2932