修改Yii目录布局

默认情况下,我们有基础和高级Yii2应用框架,他们有不同的目录结构。但是这些框架不是教条,如果有需要我们可以自定义他们。

例如,我们可以将runtime文件夹移除项目。

准备

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

如何做…

修改runtime文件夹的位置

打开config/web.phpconfig/console.php,定义runtimePath参数:

  1. $config = [
  2. 'id' => 'basic',
  3. 'basePath' => dirname(__DIR__),
  4. 'bootstrap' => ['log'],
  5. 'runtimePath' => '/tmp/runtime',
  6. 'components' => [
  7. // ...
  8. ],
  9. ]

将runtime文件夹移到新的位置。

修改vendor文件夹的位置

  1. 打开config/web.phpconsole.php,定义vendorPath参数:
  1. $config = [
  2. 'id' => 'basic',
  3. 'basePath' => dirname(__DIR__),
  4. 'bootstrap' => ['log'],
  5. 'vendorPath' => dirname(__DIR__), '/../vendor',
  6. 'components' => [
  7. // ...
  8. ],
  9. ]
  1. vendor文件夹以及composer.jsoncomposer.lock文件移到新的位置。
  2. 打开web/index.phpyii文件,找到这些行:
  1. require(__DIR__ . '/../vendor/autoload.php');
  2. require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
  1. 修改包含的路径。

修改控制器的位置

  1. 重命名commands目录为console
  2. 修改命名空间app\commands\HelloControllerapp\console\HelloController
  3. 打开config/console.php,重新定义controllerNamespace参数:
  1. $config = [
  2. 'id' => 'basic-console',
  3. 'basePath' => dirname(__DIR__),
  4. 'bootstrap' => ['log'],
  5. 'controllerNamespace' => 'app\console',
  6. 'components' => [
  7. // ...
  8. ],
  9. ]

修改视图文件夹的位置

  1. 打开config/web.php,定义viewPath参数:
  1. $config = [
  2. 'id' => 'basic',
  3. 'basePath' => dirname(__DIR__),
  4. 'bootstrap' => ['log'],
  5. 'viewPath' => '@app/myviews',
  6. 'components' => [
  7. // ...
  8. ],
  9. ]
  1. 重命名views目录。

工作原理…

yii\base\Application::preInit方法中,我们的应用定义了basePathruntimePathvendorPath参数。

默认情况下,这些值分别指向了应用目录的根,runtimevendor路径。

例如,你可以重定义vendorPath,如果你希望将vendor目录分享给同样项目的一些实例。但是注意包的版本的兼容性。

yii\base\Application类继承了yii\base\Module,它包含了controllerNamespaceviewPath参数。第一个参数允许你修改应用和模块的基命名空间。如果你希望在同一个模块目录中,提供前端和后端控制器,这会非常有帮助。只修改controllers目录到前端和后端,或者创建子目录并配置你的前端和后端应用:

  1. return [
  2. 'id' => 'app-frontend',
  3. 'basePath' => dirname(__DIR__),
  4. 'controllerNamespace' => 'frontend\controllers',
  5. 'bootstrap' => ['log'],
  6. 'modules' => [
  7. 'user' => [
  8. 'my\user\Module',
  9. 'controllerNamespace' => 'my\user\controllers\frontend',
  10. ]
  11. ],
  12. // ...
  13. ]
  14. return [
  15. 'id' => 'app-backend',
  16. 'basePath' => dirname(__DIR__),
  17. 'controllerNamespace' => 'backend\controllers',
  18. 'bootstrap' => ['log'],
  19. 'modules' => [
  20. 'user' => [
  21. 'my\user\Module',
  22. 'controllerNamespace' => 'my\user\controllers\backend',
  23. ]
  24. ],
  25. // ...
  26. ]

参考

为了了解更多关于应用结构的信息,参考http://www.yiiframework.com/doc-2.0/guide-structure-applications.html