Yii应用目录设计及配置复用
上一篇文章当中已经介绍了关于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的前后台导入含有重复设置,通过设置可以改变,但考虑到,此类情况较少,且需要使用递归合并,而配置文件为常用项,会影响性能,因此仅作一级数组合并功能。