本文是yii2.0开发API,使用RESTfulAPI方式通过Composer安装安装Yii2.0这是安装Yii2.0的首选方法。如果您没有安装Composer,您可以按照此处的说明进行安装。安装Composer后,运行以下命令安装ComposerAsset插件:phpcomposer.pharglobalrequire"fxp/composer-asset-plugin:^1.2.0"要安装高级应用程序模板,运行以下命令:phpcomposer。pharcreate-projectyiisoft/yii2-app-advancedadvanced2.0.13初始化高级模板cdadvancedinit修改数据库连接属性打开common\config\main-local.php,配置数据库连接信息'db'=>['class'=>'yii\db\Connection','dsn'=>'mysql:host=127.0.0.1;dbname=yiiapi','username'=>'root','password'=>'root','charset'=>'utf8',],执行migrate数据库迁移yiimigrate拷贝后端目录,命名为api打开api\config\main.php修改id,controllerNamespace:return['id'=>'app-api','basePath'=>dirname(__DIR__),'controllerNamespace'=>'api\controllers',]opencommon\config\main.php开启url路由美化规则'urlManager'=>['enablePrettyUrl'=>true,'showScriptName'=>false,'rules'=>[],],打开common\config\bootstrap.php并添加以下别名Yii::setAlias('@api',dirname(dirname(__DIR__)).'/api');配置web服务器很多同学看了我的教程说跑不了,一直404,然后问我为什么?看了很多,都是在本地使用Apache,index.php文件没有隐藏,他们的访问地址也不叫index.php所以我们在这里解释一下。Apache配置#设置文档根目录为"path/to/api/web"DocumentRoot"path/to/api/web"#启用mod_rewrite支持美化URL功能(译注:对应prettyURL选项)RewriteEngineon#如果请求是真实文件或目录,直接访问RewriteCond%{REQUEST_FILENAME}!-fRewriteCond%{REQUEST_FILENAME}!-d#如果请求不是真实文件或目录目录,将请求分发到index.phpRewriteRule。index.php#如果UrlManager中的$showScriptName为false,则不允许访问脚本名称为RewriteRule的URLs^index.php/-[L,R=404]#...Othersettings...或者创建一个在web目录下新建.htaccess文件,填写以下内容(我是从Laravel项目复制过来的),这样也可以隐藏index.phpOptions-MultiViews-的效果索引RewriteEngineOn#HandleAuthorizationHeaderRewriteCond%{HTTP:Authorization}。RewriteRule.*-[E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]#如果不是文件夹则重定向尾部斜杠...RewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_URI}(.+)/$RewriteRule^%1[L,R=301]#处理前端控制器...RewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_FILENAME}!-fRewriteRule^index.php[L]Nginxconfigurationlocation/{#将所有不是真实文件的内容重定向到index.phptry_files$uri$uri//index.php$is_args$args;}为什么要创建单独一个API应用,目的是方便维护,避免出现以下问题。配置冲突不方便。控制器的命名不方便。url美化规则冲突。分工明确。frontend为前台目录;backend为后台目录;\controllers新建一个User控制器,继承yii\rest\ActiveController,命名为UserController,代码如下:['request'=>[//!!!在下面插入一个密钥(如果它是空的)——这是cookie验证所需要的'cookieValidationKey'=>'P0r2XoT9LCUnyVlSgxBbJOqQxdCJ3i29','parsers'=>['application/json'=>'yii\web\JsonParser',],],],];if(!YII_ENV_TEST){//'dev'环境的配置调整$config['bootstrap'][]='debug';$config['modules']['debug']=['class'=>'yii\debug\Module',];$config['bootstrap'][]='gii';$config['modules']['gii']=['class'=>'yii\gii\Module',];}return$config;配置URL规则在刚才的用户控制器中添加url美化规则打开api\config\main.php修改components属性,添加如下代码:...'urlManager'=>['enablePrettyUrl'=>true,'enableStrictParsing'=>true,'showScriptName'=>false,'rules'=>[['class'=>'yii\rest\UrlRule','controller'=>'user'],],]...好了,现在它变成了RESTfulstyleAPI在controller里面好像什么都没写,只是指定了一个model,但是背后已经完成了很多功能,列表如下:GET/users:逐页列出所有用户HEAD/users:显示用户列表摘要信息POST/users:创建新用户GET/users/123:返回用户123详细信息HEAD/users/123:显示用户123概览PATCH/users/123:andPUT/users/123:更新用户123DELETE/users/123:删除用户123OPTIONS/users:显示终端支持的动词/usersOPTIONS/users/123:显示终端支持的动词/users/123如何访问?可以使用curl命令访问,命令如下:curl-i-H"Accept:application/json""http://localhost/users"命令行还是比较麻烦,不方便测试。API测试工具等工具很多,就不一一列举了。这里推荐Postman,很不错很强大。Chorme还有一个插件可以安装。这里我推荐直接下载软件安装调试。它更方便。你可能会发现添加了s和users可以访问任何路由地址。为什么??资源,你需要理解资源这个词。既然resources一定是一个集合,肯定有很多,所以需要加复数。我是这样理解的。你说我就是不想加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。controller里面我们没有写任何代码,他为我们生成了很多方法,但是有时候我们可能需要修改一些代码来达到我们想要的效果,比如查询表,然后返回数据后,我们会实现这个功能:打开新建的用户控制器,重写action方法:publicfunctionactions(){$action=parent::actions();//TODO:更改自动生成的存根unset($action['index']);取消设置($action['创建']);取消设置($action['更新']);取消设置($action['del等']);返回$动作;}publicfunctionactionIndex(){//你的代码}}所以我们可以重写他的代码哈哈,让我们创建一个我们自己的新动作['enablePrettyUrl'=>true,'enableStrictParsing'=>true,'showScriptName'=>false,'rules'=>[['class'=>'yii\rest\UrlRule','controller'=>'user',//'pluralize'=>false,//只需设置为false去掉复数形式'extraPatterns'=>['GETsend-email'=>'send-email'],],],]然后再访问就没有问题了,ps:自己写的任何action都必须配置在extraPatterns几乎忘记了状态码。现在我们返回的所有东西都是一个JSON。如果没有数据,返回的是一个空数组,所以这是肯定不行的。我们要添加一些特定的状态码来标识这些数据,如何添加呢?继续修改api\config\main.php,在components中添加如下代码:'response'=>['class'=>'yii\web\Response','onbeforeSend'=>function($event){$response=$event->sender;$response->data=['success'=>$response->isSuccessful,'code'=>$response->getStatusCode(),'message'=>$response->statusText,'data'=>$response->数据,];$response->statusCode=200;},],这里统一用200来表示,当然不是所有都是200,你应该具体情况具体对待,切记不要随意乱加各种标识,请按照这些规范。你觉得缺少什么吗?认证没错,就是认证,但是认证是完美的,篇幅有限,内容太多,反而会影响阅读的兴趣。下一部分将介绍认证。感谢以下接下来,特邀魏曦的视频教程魏曦教你学习YiiFramework2.0不足之处权威指南,欢迎指正