View on GitHub

yii2-cookbook-chinese

Yii Application Development Cookbook(Third Edition)中文翻译

修改一个高级应用模板

默认情况下,Yii2的高级模板有consolefrontendbackend应用。但是,在你的特殊情况下,你可以重命名已有的一个,创建你自己的应用。例如,如果你在为你的网站开发API,你可以添加api应用。

准备

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

如何做…

  1. 在应用的根目录下,复制backend文件夹中的内容到一个新的api文件夹中。
  2. 打开api/config/main.php文件,修改controllerNamespace的值:
return [
    'id' => 'app-manager',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'api\controllers',
    // ....
]
  1. 打开api/assets/AppAsset.phpapi/controllers/SiteController.php,将命名空间从backend修改为api
namespaces api\assets;
namespaces api\controllers;
  1. 打开api/views/layouts/main.php文件,找到如下行:
use backend\assets\AppAsset;

修改为:

use api\assets\AppAsset;
  1. 打开common/config/bootstrap.php,为新的应用添加@api alias:
<?php
Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) .'/frontend');
Yii::setAlias('@backend', dirname(dirname(__DIR__)) .'/backend');
Yii::setAlias('@console', dirname(dirname(__DIR__)) .'/console');
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
  1. 打开environments目录,在devprod子文件夹中,拷贝backend文件夹为api
  2. 打开environments/index.php文件,为api应用添加如下行:
return [
    'Development' => [
        'path' => 'dev',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
            'api/runtime',
            'api/web/assets',
        ],
        'setExecutable' => [
            'yii',
            'tests/codeception/bin/yii',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
            'api/config/main-local.php',
        ],
    ],
    'Production' => [
        'path' => 'prod',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
            'api/runtime',
            'api/web/assets',
        ],
        'setExecutable' => [
            'yii',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
            'api/config/main-local.php',
        ],
    ],
];

现在,你就有了consolefrontendbackendapi应用。

工作原理…

高级应用模板,是一组带有自定义aliases的应用集合,例如@frontend@backend@common@console,以及相对应的命名空间。而对于Basic模板只有一个简单的@app alias。

如果有需要,你可以很容易的添加、删除或者重命名这些应用(以及他们的aliases和命名空间)。

参考

欲了解更多关于应用目录结构使用的信息,参考https://github.com/yiisoft/yii2-app-advanced/tree/master/docs/guide