/ yii2

yii2-route

路由

  • yii\web\UrlManager::parseRequest() 方法可以将 request 解析为 route 和 parameters。
  • yii\web\UrlManager::createUrl() 方法可以将 route 和 parameters 生成一个 URL。

启用 urlManager

Yii2 默认没有启用该组件,如需启用需要手动修改配置文件:

[
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '/' => 'site/index',
                '/login' => 'site/login',
                'articles/<year:\d{4}>/<category>' => 'article/index',
                'articles' => 'article/index',
                'article/<id:\d+>' => 'article/view',
                'category/<slug:[A-Za-z0-9 -_.]+>' => 'post/index',
                'post/<slug:[A-Za-z0-9 -_.]+>' => 'post/view',
            ],
            // ↓启用严格模式时,就仅仅会解析上述 rules 中的路由,其他都抛 404
            //'enableStrictParsing' => true,
            // ↓设置伪静态后缀
            //'suffix' => '.html'
        ],
    ],
];

生成 url

use yii\helpers\Url;

// Url::to() calls UrlManager::createUrl() to create a URL
$url = Url::to(['site/index']);// 输出的就是 /
$url = Url::to(['site/login']);// 输出的就是 /login

生成绝对地址:

// 调用 UrlManager
echo Url::toRoute('site/index', true);
// http://www.example.com/index.php?r=site/index

// 调用 UrlManager
echo Url::toRoute('site/index', 'https');
// https://www.example.com/index.php?r=site/index

当使用 UrlManager::createAbsoluteUrl()、Url::to() or Url::toRoute() 来生成 URLs 时,指定模式为空字符串现在会生成协议相对的 URLs:

echo Url::to('@web/images/logo.gif', '');
// 将打印 //www.example.com/images/logo.gif

设置默认控制器 和 错误页面

[
    'components' => [
        'errorHandler' => [
            // 错误页面,原值:site/error
            'errorAction' => 'html/error',
        ],
    ],
    // 默认控制器,默认值为 site
    'defaultRoute' => 'html',
];

闭站保护 catchAll

[
    // ...
    'catchAll' => ['site/offline'],
];

urlManager