一、环境部署

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的更多相关文章

  1. Yii2框架添加API Modules

    原文链接:http://www.itnose.net/detail/6459353.html : 一.环境部署 1. read fucking Yii Documents. http://www.yi ...

  2. Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

    之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下 ...

  3. Yii2框架RESTful API教程(一) - 快速入门

    前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...

  4. Yii2框架RESTful API教程

    前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...

  5. 《深入解剖Yii2框架》前言

    写代码需要站在巨人的肩膀上,将主要精力集中在自己所需要实现的业务上面,避免反复搭建基础服务,重复造轮子.PHP框架就是这样一些巨人的"肩膀",使得我们"站"得更 ...

  6. 从yii2框架中的di容器源码中了解反射的作用

    反射简介 参考官方简介的话,PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 此外,反射 API 提供了方法来取出函数.类和方法中的文档注释. YII2框架中 ...

  7. Yii2框架实现计数器功能

    思路: 因为yii2框架没有像tp框架那样的setinc这样的累加函数,所以只能在每次累加之前查出当前的这个字段的值,然后写算法累加入库 例如:

  8. 关于yii2框架活动记录activeRecord添加默认字段的问题

    平时使用sql的时候可以如下添加默认字段flag: "select a.*,0 as flag from user_info a", 对于yii2框架则需要这样: $query = ...

  9. [PHP]Yii2框架的坑

    [PHP]Yii2框架的坑.md-/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑 html{font-family: sans-serif;-ms-text-size- ...

随机推荐

  1. java web中jsp常用标签

    在jsp页面开发过程中,经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面,是看起来更加的规整舒服. JSTL主要提供了5大类标签库: ...

  2. nginx是以多进程的方式来工作的

    nginx是以多进程的方式来工作的. nginx在启动后,会有一个master进程和多个worker进程. master进程主要用来管理worker进程: 包含: 1.接收来自外界的信号,向各work ...

  3. unity3D角色代码控制问题

    ///////////////2015/07/06//////// ///////////////by xbw////////////// //////////////环境 unity4.6.1// ...

  4. [hihoCoder] #1093 : 最短路径·三:SPFA算法

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的晚上,小Hi和小Ho在吃过晚饭之后,来到了一个巨大的鬼屋! 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之 ...

  5. Mac 下的矢量图设计工具

    Mac 下的矢量图设计工具 一图胜千言.一张清晰的示意图无论对于系统设计,流程梳理,还是其他的方方面面,都非常重要. 曾经亲见一位老同事把 FreeHand 这个矢量绘图工具用得出神入化,并且非常成功 ...

  6. C#用正则表达式一键Unicode转UTF8(解决LitJson中文问题)

    txt = Regex.Unescape(txt);

  7. 关于haproxy负载均衡的算法整理

    目前haproxy支持的负载均衡算法有如下8种: 1:roudrobin 表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法.该算法是动态的,对于实例 ...

  8. linux下调试core的命令

    在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数. 1.core文件的生成开 ...

  9. C的面向对象编程

    C语言并不支持类这样的概念,但是C仍旧可以使用面向对象的概念. C++中的类,关键在于它的虚函数表.因此,我们要模拟一个能够支持虚函数表的类. 使用C的struct结构,可以模拟类和虚函数. 比如,我 ...

  10. Python socket聊天室程序

    http://blog.csdn.net/calling_wisdom/article/details/42524745 今天用python的socket模块实现了一个聊天室的程序 虽然功能比较简单, ...