修改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。