Yii2框架加入API Modules

1、環境部署php

1. read fucking Yii Documents.git

http://www.yiichina.com/doc/guide/2.0
github


2. 瞭解依賴注入模式web

Java描寫敘述:bootstrap

http://blog.csdn.net/taijianyu/article/details/2338311/
api


3. 使用advanced模板部署Yii2yii2

https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md
app

# 必定要注意要運行init命令進行配置,僅僅有運行了該命令,纔會從environments文件夾下將dev或prod環境的配置信息和例子配置進入project,才幹夠測試是否可用。frontend

4. 測試例子可否使用。不能使用從頭檢查。yii

2、模塊配置

1. 在advanced文件夾下,建立api文件夾,將frontend或backend模塊下所有文件複製過來

2. 配置api的別名,假設不配置這樣。就需要設置很是長的全名。easy出錯還麻煩。

advanced/common/config/bootstrap.php修改爲例如如下樣子:

<?php
Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api'); \\ 新加入別名
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');

3. 配置api模塊裏的main.php配置文件

<?

php $params = array_merge( require(__DIR__ . '/../../common/config/params.php'), require(__DIR__ . '/../../common/config/params-local.php'), require(__DIR__ . '/params.php'), require(__DIR__ . '/params-local.php') ); return [ 'id' => 'app-api', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'modules' => [ \\ 加入模塊v1和v2,分別表示不一樣的版本號 'v1' => [ 'class' => 'api\modules\v1\Module' ], 'v2' => [ 'class' => 'api\modules\v2\Module' ] ], 'controllerNamespace' => 'api\controllers', 'components' => [ 'user' => [ 'identityClass' => 'common\models\User', 'enableAutoLogin' => false, // API change to false 'enableSession' => false, // API ++ 'loginUrl' => null // API ++ ], 'log' => [ 'traceLevel' => YII_DEBUG ?

3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'errorHandler' => [ 'errorAction' => 'site/error', ], // 'urlManager' => [ // 'enablePrettyUrl' => true, // 啓用美化URL // 'enableStrictParsing' => true, // 是否運行嚴格的url解析 // 'showScriptName' => false, // 在URL路徑中是否顯示腳本入口文件 // 'rules' => [ // [ // 'class' => 'yii\rest\UrlRule', // 'controller' => [ // 'v1/site' // ] // ], // [ // 'class' => 'yii\rest\UrlRule', // 'controller' => [ // 'v2/site' // ] // ] // ] // ], ], 'params' => $params, ];


# 該main.php文件在建立應用時做爲配置項構造應用實例。

簡而言之,讓應用知道咱們加入了兩個模塊:v1和v2


4. 依據main.php裏修改知道,咱們的模塊路徑爲:api\modules\v1\Module,那就建立它吧。

    1> 在api文件夾下建立modules文件夾,在modules文件夾下建立v1文件夾。v2文件夾

    2> 在v1和v2文件夾下分別建立Module.php文件,內容例如如下:

<?php
namespace api\modules\v1;

class Module extends \yii\base\Module
{
    public $controllerNamespace = 'api\modules\v1\controllers';
    public function init()
    {
        parent::init();

        // ...  其它初始化代碼 ...
    }
}
?>
# 兩處紅色部分依據你是v1,仍是v2分別不一樣。代碼意思是。要經過依賴注入時要有這個類。沒有這個類,在運行時會報:依賴注入找不到該類錯誤。


5. 完整Modules中的文件夾結構

在v1和v2文件夾下分別建立:controllers,models。views文件夾,這個不用多說了吧。MVC,MVC。

爲了有個默認的接口返回信息。咱們依照frontend的文件夾結構,在controllers文件夾下建立一個SiteController.php

<?php
namespace api\modules\v1\controllers;
use yii\rest\Controller;
class SiteController extends ActiveController
{
    public function actionIndex()
    {
           \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
           return [
               'message' => 'API test Ok!',
               'code' => 100,
           ];
    }
}


?>
# 沒什麼好說的,就是返回JSON信息。

假設你實在不肯意使用SiteController.php,也就是說不想用site這個控制器ID。你可以在api/index.php中加入一行代碼:

<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../../vendor/autoload.php');
require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/bootstrap.php');
require(__DIR__ . '/../config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../../common/config/main.php'),
    require(__DIR__ . '/../../common/config/main-local.php'),
    require(__DIR__ . '/../config/main.php'),
    require(__DIR__ . '/../config/main-local.php')
);

$application = new yii\web\Application($config);
$application->defaultRoute = 'v1/hello';
$application->run();

而後在v1/controllers/下建立一個新的HelloController.php:
<?

php namespace api\modules\v1\controllers; use yii\web\Controller; class HelloController extends Controller { public function actionIndex() { \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return [ 'message' => 'API test Ok!', 'code' => 100, ]; } } ?>

默認便可調用這個路由:v1/hello/index

 

以上

相關文章
相關標籤/搜索