如何在Yii2页面创建中使用带有多个单词的破折号

时间:2019-03-25 08:29:28

标签: php yii2

我正在尝试使用Yii2创建一个静态页面。页面名称有两个单词,例如-隐私权政策。我在SiteController.php

内添加了以下代码
public function actionPrivacyPolicy()
{
    return $this->render('privacy-policy');
}

然后,我在站点文件夹内创建了一个名为-privacy-policy.php的页面。 但是,这导致找不到页面错误。 我的网站有很多这样的情况。解决此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

如果使用"enablePrettyUrl"=>true

,则需要访问以下网址
  • http://yoursite.com/site/privacy-policy

  • http://yoursite.com/index.php?r=site/privacy-policy

如果不使用"enablePrettyUrl"=>true

此后,您仅需要按操作名称来解析SiteController中的所有操作,因此您需要转动"enableStrictParsing"=>false,然后在urlManager

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    "enableStrictParsing" => false,
    'rules' => [
        "/" => "site/index",
        "<action:(.*)>" => 'site/<action>',
    ],
],

编辑:

尽管这允许/不应允许使用字符,但是,我在规则中使用(.*)的原因是因为操作名称将在控制器内定义,并且您必须在声明的位置使用规则仅在SiteController内部执行操作,而该操作不会使用任何不允许的字符来解析规则的任何操作名称,这意味着如果操作名称将为actionMyActionNameLong,则存在0的可能性/\的生成是带有操作名称的操作名称,在使用规则时会进一步破坏操作,因此可以在此上下文中使用它,否则,如果创建网址,则可以使用[\w\-]+手动。

答案 1 :(得分:0)

模式<alias:\w+>与连字符不匹配,因为\w+仅接受字母,数字和下划线。您需要使用[\w\-]+来匹配由连字符分隔的单词。

'rules' => [
    '<alias:[\w\-]+>' => 'site/<alias>',
    // ...
],

答案 2 :(得分:-1)

我认为您可以在config文件夹的main.php中配置UrlManager 并尝试在urlManager上添加一些规则,以便可以动态访问URL

'urlManager' => [
            "enablePrettyUrl" => true,
            "showScriptName" => false,
            "enableStrictParsing" => false,
            "suffix" => "",
            "rules" => [
                "<controller:\w+>/<action:\w+>" => "<controller>/<action>"
            ],
        ],

如果在控制器行为上使用\ yii \ filters \ AccessControl,则可能需要在创建新操作之前将允许的操作添加到列表中。