上一篇文章当中已经介绍了关于YII的组织目录形式,但是经过实践会发现一些问题,上文中仅仅解决了,各应用之间共享models,components的问题,但是无法解决配置文件复用。
下面就这一问题进行描述。(原文地址)
/webroot
/protected
/admin
/config
main.php
/models
/components
/controllers
/views
/runtime
/config
main.php
/models
/components
/controllers
/views
/runtime
/extensions
依旧使用这样的组织目录形式,在之后的描述当中根目录下的的应用作为frontend,admin为backend,使用别名解析后,application指向protected目录,backend指向admin目录
前台配置文件如下(仅写一部分配置作为示例)
return array( 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', 'name'=>'网站前台', 'language'=>'zh_cn', 'preload'=>array('log'), 'import'=>array(
'application.models.*', 'application.components.*', ),
)
后台配置文件如下
$backend=dirname(dirname(__FILE__)); $frontend=dirname($backend); Yii::setPathOfAlias('backend',$backend); $frontendArray=require_once($frontend.'/config/main.php'); $backendArray=array( 'name'=>'网站后台管理系统', 'basePath'=>$frontend, 'viewPath' =>$backend.'/views', 'controllerPath'=>$backend.'/controllers', 'runtimePath' => $backend.'/runtime', 'import'=>array( 'application.models.*', 'application.components.*', 'backend.models.*', 'backend.components.*', ), ); return array_merge($frontendArray,$backendArray);
前台配置文件按照单一应用的配置形式即可,后台文件中,将前台文件包含,同时设置backend别名解析,使得所有应用当中
application指向protected目录,backend指向admin目录。
后台配置文件与前台配置文件进行数组合并,没有的项自动包含,相同项则将其覆盖,例如后台中可使用'language'=>'zh_cn',且'name'=>'网站后台管理系统'仍为自己,是将前台覆盖的结果
。
当然这样还有重复配置的现象,例如import的前后台导入含有重复设置,通过设置可以改变,但考虑到,此类情况较少,且需要使用递归合并,而配置文件为常用项,会影响性能,因此仅作一级数组合并功能。