您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP框架 > Yii Framework

Yii2框架添加API Modules

作者:UncleToo  来源:转载  日期:2016-03-01 22:33:54
收藏  评论:( 0 )  阅读:289

一、环境部署
1. read fucking Yii Documents.
http://www.yiichina.com/doc/guide/2.0

2. 了解依赖注入模式
Java描述:
http://blog.csdn.net/taijianyu/article/details/2338311/

3. 使用advanced模板部署Yii2
https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md
# 一定要注意要执行init命令进行配置,只有执行了该命令,才会从environments目录下将dev或prod环境的配置信息和样例配置进入工程,才可以测试是否可用。
4. 测试样例是否能使用,不能使用从头检查。


二、模块配置
1. 在advanced目录下,创建api目录,将frontend或backend模块下所有文件复制过来
2. 配置api的别名,如果不配置这样,就需要设置很长的全名,容易出错还麻烦。
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');
<strong><span style="color:#990000;">Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');  \\ 新添加别名</span></strong>
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'],
<strong><span style="color:#990000;">'modules' => [  \\ 添加模块v1和v2,分别表示不同的版本
'v1' => [
'class' => 'api\modules\v1\Module'
],
'v2' => [
'class' => 'api\modules\v2\Module'
]
],</span>
<span style="color:#cc0000;">'controllerNamespace' => 'api\controllers',</span></strong>
'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
<strong><span style="color:#cc0000;">namespace api\modules\v1;</span></strong>
class Module extends \yii\base\Module
{
<strong><span style="color:#cc0000;">public $controllerNamespace = 'api\modules\v1\controllers';</span></strong>
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 <span style="font-family: Monaco; font-size: 11px;">ActiveController</span>
{
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);
<strong><span style="color:#cc0000;">$application->defaultRoute = 'v1/hello';</span></strong>
$application->run();

然后在v1/controllers/下创建一个新的HelloController.php:

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

默认就行调用这个路由:v1/hello/index



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/yii/1192.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论