2

我无法显示静态页面。尝试按照此处文档中的说明进行操作 - 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) 无法解决请求:站点/页面?&view=break

如果我禁用 prettyUrl:

//'enablePrettyUrl'=>true

然后我可以看到我的页面输入 url: index.php?r=site/page&view=break

ViewAction 有什么问题?

4

4 回答 4

2

我解决了我的问题。使用这样的行:

'<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 的“自己的规则类”,但认为现在我不需要这个。

于 2015-02-22T09:55:55.297 回答
2

我认为你在做你的 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>',
    ),
    ],

规则部分应该很重要..

于 2015-02-21T14:20:17.983 回答
1

我曾尝试过这种方式(没有规则规范):

        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
    ],
于 2015-02-21T22:09:29.623 回答
0

解决方法很简单:

  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.感谢 samdark 及其文章https://github.com/yiisoft/yii2/issues/2932

于 2017-01-18T13:34:06.450 回答