最近在作Yii2.0 RESTful API功能,找了很久的资料,才找到这类的教程,感谢该做者,如下内容根据个人项目实际状况作了必定的修改。php
安装 Composer 后,您能够经过在 Web 可访问的文件夹下运行如下命令来 安装Yii应用程序模板:mysql
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
cd advanced ./init
Yii Application Initialization Tool v1.0 Which environment do you want the application to be initialized in? [0] Development [1] Production Your choice [0-1, or "q" to quit] 0 Initialize the application under 'Development' environment? [yes|no] yes Start initialization ...
打开 common\config\main-local.php,配置数据库链接信息sql
'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=yii', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', ],
./yii migrate
return [ 'id' => 'app-api', 'basePath' => dirname(__DIR__), 'controllerNamespace' => 'api\controllers', ]
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ],
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
单首创建API应用,目的是便于维护,能够避免如下问题数据库
接下来打开 api\controllers 新建一个User控制器,继承 yii\rest\ActiveController,命名为 UserController,代码以下:json
<?php namespace api\controllers; use yii\rest\ActiveController; class UserController extends ActiveController { public $modelClass = 'common\models\User'; }
为刚才的 user控制器添加url美化规则
打开 api\config\main.php 修改 components属性,添加下列代码:bootstrap
... 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user' ], ], ] ...
ok,到此就成了一个 符合 RESTful 风格的API
看起来在控制器了什么也没有写,只是指定了一个模型,可是她的背后完成了不少的功能哦,列表以下:segmentfault
你可使用 curl命令进行访问,命令以下:api
curl -i -H "Accept:application/json" "http://localhost/users"
命令行下仍是比较麻烦的,也不方便测试,推荐使用 API测试工具yii2
这类的工具备不少,我就不一一列举了,这里推荐 Postman,很好很强大,Chorme也有插件,能够安装,这里我推荐直接下载软件安装调试,比较方便app
你可能发现了 访问任何路由地址都是加的s,users , 为何呢? 资源,你要理解 资源二字,既然是资源确定是个集合,确定有一大堆,因此要加上复数,我是这么理解的。
你说我就是不想加上s,我就想采用http://localhost/user 这种方式来进行访问,好吧,能够,知足你,只是不推荐
继续打开配置文件api\config\main.php修改刚才添加的 urlManager 以下:
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user', 'pluralize' => false, //设置为false 就能够去掉复数形式了 ], ], ]
加入 'pluralize' => false, 就表示去掉复数形式了,再次强调不推荐
ok,在控制器中咱们没有写任何一句代码,他就给咱们生成许多方法,可是有时候咱们可能须要修改一些代码,来达到咱们想要的效果,好比连表查询,而后再返回数据
接下来咱们就实现这样的功能:
打开刚才新建的user控制器, 重写 action方法:
<?php namespace api\controllers; use yii\rest\ActiveController; class UserController extend extends ActiveController { public $modelClass = 'common\models\User'; public function actions() { $action= parent::actions(); // TODO: Change the autogenerated stub unset($action['index']); unset($action['create']); unset($action['update']); unset($action['delete']); } public function actionIndex() { //你的代码 } }
这样咱们就能够重写他的代码了。哈哈
咱们再新建一个本身的 action
<?php namespace api\controllers; use yii\rest\ActiveController; class UserController extends ActiveController { public $modelClass = 'common\models\User'; public function actions() { $action= parent::actions(); // TODO: Change the autogenerated stub unset($action['index']); unset($action['create']); unset($action['update']); unset($action['delete']); } public function actionIndex() { //你的代码 } public function actionTest() //假如是get请求 { //业务逻辑 } }
而后试着访问一下 http://localhost/users/test,报错?找不到?
报错就对了,那是由于咱们没有设置其余路由访问
修改 api\config\main.php
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user', //'pluralize' => false, //设置为false 就能够去掉复数形式了 'extraPatterns'=>[ 'GET send-email'=>'test' ], ], ], ]
接下来从新访问就没有问题了,ps:你本身编写的任何 action 都要在 extraPatterns 进行配置
再次感谢如下: