修改Yii目录布局
默认情况下,我们有基础和高级Yii2应用框架,他们有不同的目录结构。但是这些框架不是教条,如果有需要我们可以自定义他们。
例如,我们可以将runtime文件夹移除项目。
准备
按照官方指南http://www.yiiframework.com/doc-2.0/guide-start-installation.html的描述,使用Composer包管理器创建一个新的yii2-app-basic应用。
如何做…
修改runtime文件夹的位置
打开config/web.php和config/console.php,定义runtimePath参数:
$config = ['id' => 'basic','basePath' => dirname(__DIR__),'bootstrap' => ['log'],'runtimePath' => '/tmp/runtime','components' => [// ...],]
将runtime文件夹移到新的位置。
修改vendor文件夹的位置
- 打开
config/web.php和console.php,定义vendorPath参数: 
$config = ['id' => 'basic','basePath' => dirname(__DIR__),'bootstrap' => ['log'],'vendorPath' => dirname(__DIR__), '/../vendor','components' => [// ...],]
- 将
vendor文件夹以及composer.json和composer.lock文件移到新的位置。 - 打开
web/index.php和yii文件,找到这些行: 
require(__DIR__ . '/../vendor/autoload.php');require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
- 修改包含的路径。
 
修改控制器的位置
- 重命名
commands目录为console。 - 修改命名空间
app\commands\HelloController为app\console\HelloController。 - 打开
config/console.php,重新定义controllerNamespace参数: 
$config = ['id' => 'basic-console','basePath' => dirname(__DIR__),'bootstrap' => ['log'],'controllerNamespace' => 'app\console','components' => [// ...],]
修改视图文件夹的位置
- 打开
config/web.php,定义viewPath参数: 
$config = ['id' => 'basic','basePath' => dirname(__DIR__),'bootstrap' => ['log'],'viewPath' => '@app/myviews','components' => [// ...],]
- 重命名
views目录。 
工作原理…
在yii\base\Application::preInit方法中,我们的应用定义了basePath、runtimePath和vendorPath参数。
默认情况下,这些值分别指向了应用目录的根,runtime和vendor路径。
例如,你可以重定义vendorPath,如果你希望将vendor目录分享给同样项目的一些实例。但是注意包的版本的兼容性。
yii\base\Application类继承了yii\base\Module,它包含了controllerNamespace和viewPath参数。第一个参数允许你修改应用和模块的基命名空间。如果你希望在同一个模块目录中,提供前端和后端控制器,这会非常有帮助。只修改controllers目录到前端和后端,或者创建子目录并配置你的前端和后端应用:
return ['id' => 'app-frontend','basePath' => dirname(__DIR__),'controllerNamespace' => 'frontend\controllers','bootstrap' => ['log'],'modules' => ['user' => ['my\user\Module','controllerNamespace' => 'my\user\controllers\frontend',]],// ...]return ['id' => 'app-backend','basePath' => dirname(__DIR__),'controllerNamespace' => 'backend\controllers','bootstrap' => ['log'],'modules' => ['user' => ['my\user\Module','controllerNamespace' => 'my\user\controllers\backend',]],// ...]
参考
为了了解更多关于应用结构的信息,参考http://www.yiiframework.com/doc-2.0/guide-structure-applications.html。
