Yii2框架加入API Modules
一、环境部署
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环境的配置信息和例子配置进入project,才干够測试是否可用。
4. 測试例子能否使用。不能使用从头检查。
二、模块配置
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
以上
Yii2框架加入API Modules的更多相关文章
- Yii2框架添加API Modules
原文链接:http://www.itnose.net/detail/6459353.html : 一.环境部署 1. read fucking Yii Documents. http://www.yi ...
- Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制
之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下 ...
- Yii2框架RESTful API教程(一) - 快速入门
前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...
- Yii2框架RESTful API教程
前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...
- 《深入解剖Yii2框架》前言
写代码需要站在巨人的肩膀上,将主要精力集中在自己所需要实现的业务上面,避免反复搭建基础服务,重复造轮子.PHP框架就是这样一些巨人的"肩膀",使得我们"站"得更 ...
- 从yii2框架中的di容器源码中了解反射的作用
反射简介 参考官方简介的话,PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 此外,反射 API 提供了方法来取出函数.类和方法中的文档注释. YII2框架中 ...
- Yii2框架实现计数器功能
思路: 因为yii2框架没有像tp框架那样的setinc这样的累加函数,所以只能在每次累加之前查出当前的这个字段的值,然后写算法累加入库 例如:
- 关于yii2框架活动记录activeRecord添加默认字段的问题
平时使用sql的时候可以如下添加默认字段flag: "select a.*,0 as flag from user_info a", 对于yii2框架则需要这样: $query = ...
- [PHP]Yii2框架的坑
[PHP]Yii2框架的坑.md-/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑 html{font-family: sans-serif;-ms-text-size- ...
随机推荐
- Python 多进程 一分钟下载二百张图片 是什么样子的体验
需要爬取国内某个网站,但是这个网站封ip,没办法,只能用代理了,然后构建自己的代理池,代理池维护了20条进程, 所用的网络是20M带宽,实际的网速能达到2.5M,考虑到其他原因,网速未必能达到那么多. ...
- jmeter 发送http请求,并把获取到的请求的订单信息保存到文件中
有一个任务,需要频繁发送订单请求,并分析订单请求中有没有存在重复订单号,思路是用jmeter 发送http请求,使用正则表达式获取到订单号,并把订单号和线程号作为参数提供给java请求,在java请求 ...
- es6编写generator报错
首先babel基础包(不安装额外东西)并不是支持完整的es6语言 自己写的如下代码 let generator = function* () { ; ,,]; ; }; var gen = gener ...
- 【转】python2与python3的主要区别
摘自:http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html 1.性能 Py3.0运行 pystone benchmar ...
- CentOS配置SSH远程连接
本文为大家介绍Centos中配置SSH远程连接的方法,只是简单配置,供初学者参考. 1.配置IP#setup 选择 NetWork configuration 选择 Device configurat ...
- SGMII 和 Serdes 的详细说明
Serdes : SERDES是英文SERializer(串行器)/DESerializer(解串器)的简称.它是一种时分多路复用(TDM).点对点的通信技术,即在发送端多路低速并行信号被转换成高速 ...
- 【Android】21.3 动画
分类:C#.Android.VS2015: 创建日期:2016-03-21 一.简介 Android 提供了以下三种创建动画的方式: Drawable Animations – 画板动画,也叫帧动画( ...
- 【Android】7.3 GridLayout(网格布局)
分类:C#.Android.VS2015: 创建日期:2016-02-10 一.简介 Android 4.0(API 14)开始提供的GridLayout布局使用虚细线将布局划分为行.列和单元格,也支 ...
- Linux Awk使用案例总结(nginx日志统计,文件对比合并等)
知识点: 1)数组 数组是用来存储一系列值的变量,可通过索引来访问数组的值. Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串. 下标通常称为键,数组元素的键和值存储在Awk程序 ...
- MAC下cmake安装
可以参考网上手动下载cmake的源码包进行安装,http://www.cmake.org/download/ 解压后运行sudo ./bootstrap && sudo make &a ...