2015-03-26 11:28:38 5069次浏览 3条回答 1 悬赏 1 金钱

yii 中 common/config 跟 frontend/config 有什么区别?按照教程在frontend/config 中建立一个db.php ,保存的是数据库文件,可是,程序默认找common中的数据库配置,怎样才能加载db.php?

  • 回答于 2015-03-26 11:50 举报

    高级模版的配置是覆盖型的,如果在frontend中,配置是继承common中的配置,当然也可以重写,也就是以frontend中的配置为准。backend中一样

  • 回答于 2015-03-26 11:57 举报
    1. db.php其实被frontend/config/main.php或者frontend/config/main-local.php的require之后,也相当于是写在frontend/config/main.php或者是main-local.php中。

    2. common/config里面的配置是console,backend,frontend共用的,所以里面只放三者都适用的配置信息。比如你在frontend中用到module,则最好只在frontend/config中定义它,你要是在common里面的modules定义该module,你会发现执行console的command时会报错的,费力纠正这个错误是没有必要的,因为你不会在command中使用这个module。

    只要看三者的入口函数就清楚了:
    a) console的看yii

    $config = yii\helpers\ArrayHelper::merge(
        require(__DIR__ . '/common/config/main.php'),
        require(__DIR__ . '/common/config/main-local.php'),
        require(__DIR__ . '/console/config/main.php'),
        require(__DIR__ . '/console/config/main-local.php')
    );
    

    b) frontend的看frontend/web/index.php

    $config = yii\helpers\ArrayHelper::merge(
    	require __DIR__ . '/../../common/config/main.php',
    	require __DIR__ . '/../../common/config/main-local.php',
    	require __DIR__ . '/../config/main.php',
    	require __DIR__ . '/../config/main-local.php'
    );
    

    c) backend的看backend/web/index.php

    $config = yii\helpers\ArrayHelper::merge(
        require(__DIR__ . '/../../common/config/main.php'),
        require(__DIR__ . '/../../common/config/main-local.php'),
        require(__DIR__ . '/../config/main.php'),
        require(__DIR__ . '/../config/main-local.php')
    );
    

    merge的好处是,除了可以合并配置信息,后面的定义还会覆盖前面相同key的定义,比如main.php中对应的db是生产环境的db配置,而main-local.php对应的db是自己开发环境的db配置,那么main-local.php会覆盖掉main.php的db配置(main-local.php放在后面),比较适合多人协同开发的环境。(顺便说一下:main-local.php一般是不放到git仓库或者svn仓库的)

  • 回答于 2015-03-30 11:30 举报

    这是优先级的问题! 后者高于前者

您需要登录后才可以回答。登录 | 立即注册
ooiikaka1
等待激活

ooiikaka1

注册时间:2015-03-26
最后登录:2022-04-26
在线时长:1小时28分
  • 粉丝0
  • 金钱4
  • 威望0
  • 积分14

热门问题