View on GitHub

yii2-cookbook-chinese

Yii Application Development Cookbook(Third Edition)中文翻译

将配置部分移到单独的文件中

在基础应用模板中,我们分离了web和console配置文件。通常情况下,我们可以在两个配置文件中设置一些应用组件。

而且,当我们开发一个大型应用时,我们可能面临一些不方便的问题。例如,如果我们需要调整一些设置,我们很可能需要在web应用配置和console应用配置中做多次重复修改。

准备

按照官方指南http://www.yiiframework.com/doc-2.0/guide-start-installation.html的描述,使用Composer包管理器创建一个新的yii2-app-basic应用。

如何做…

  1. 打开config/web.php文件,添加urlManager部分到组件配置中:
'components' => [
    // ...
    'db' => require(__DIR__ . '/db.php'),
    'urlManager' => [
        'class' => 'yii\web\UrlManager',
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            '' => 'site/index',
            '<_c:[\w\-]+>/<id:\d+>' => '<_c>/view',
            '<_c:[\w\-]+/<_a:[\w\-]+>>/<id:\d+>' => '<_c>/<_a>',
            '<_c:[\w\-]+>' => '<_c>/index',
        ],
    ],
],
  1. 创建config/urlRules.php文件,并将规则数组移到这里边:
<?php
return [
    '' => 'site/index',
    '<_c:[\w\-]+>/<id:\d+>' => '<_c>/view',
    '<_c:[\w\-]+/<_a:[\w\-]+>>/<id:\d+>' => '<_c>/<_a>',
    '<_c:[\w\-]+>' => '<_c>/index',
];
  1. 使用这个文件替换这个规则数组:
'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => require(__DIR__ . '/urlRules.php'),
],

工作原理…

先前的技术依赖于这样的事实,Yii配置文件是原生的PHP文件,里边有一个数组:

<?php return [...];

我们看require结构:

'rules' => require(__DIR__ . '/urlRules.php'),

当我们使用这个的时候,它会读取指定的文件,并且,如果文件中有一个return语句,它会返回一个值。

因此,将主配置文件中的一部分移到一个单独的文件中,需要创建一个新的文件,将配置的一部分移到return语句的后边,并在主配置文件中使用require

它分离了应用需要的一些常用配置部分(在我们的例子中,有web应用和console应用),我们可以使用require将他们移到一个单独的文件中。

参考

欲了解更多关于requireinclude语句,参考如下URL: