Yii 2 静态页面
Posted
技术标签:
【中文标题】Yii 2 静态页面【英文标题】:Yii 2 static pages 【发布时间】:2015-04-23 01:31:39 【问题描述】:我无法显示静态页面。尝试按照此处文档中的说明进行操作 - 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',
],
];
然后创建views/site/pages/break.php
<h1>View static page Break</h1>
但我得到一个错误: 未找到 (#404) 无法解析请求:site/page?&view=break
如果我禁用 prettyUrl:
//'enablePrettyUrl'=>true
然后我可以看到我的页面输入网址:index.php?r=site/page&view=break
ViewAction 有什么问题?
【问题讨论】:
【参考方案1】:我认为您的 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>',
),
],
规则部分应该很重要..
【讨论】:
是的,现在 'site/page?&view=break' 打开页面 break.php,但是如何制作更适合 seo 的 url?就像'site.ru/break'【参考方案2】:我曾尝试过这种方式(没有规则规范):
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => 'false'
],
【讨论】:
【参考方案3】:我解决了我的问题。使用这样的行:
'<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 的“自己的规则类”,但认为现在我不需要这个。
【讨论】:
'<view:(break)>' => 'site/page'
这是要走的路!
请注意,这条规则也应该有效:'<view:[a-zA-Z0-9-]+>' => 'site/page'
它应该最后声明,否则它会捕获所有其他模式。【参考方案4】:
解决方法很简单:
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);
.
-
如果views/site/pages/中存在view contacts.php,则url为yourdomain/basic/web/site/page/contact
4.感谢 samdark 和文章https://github.com/yiisoft/yii2/issues/2932
【讨论】:
以上是关于Yii 2 静态页面的主要内容,如果未能解决你的问题,请参考以下文章
EasyUI Tabs + Yii2.0实现iframe方式打开页面(解决共用静态文件引入加载的问题)