最近在研究Yii2.0RESTfulAPI功能。找了半天资料,终于找到了这种教程。感谢作者。以下内容是根据我项目的实际情况做了一些修改。安装yii2.0安装Composer后,您可以通过在Web可访问的文件夹中运行以下命令来安装Yii应用程序模板:composercreate-project--prefer-distyiisoft/yii2-app-basicbasicinitializeadvancedtemplatecdadvanced./init输入“./init”后会出现如下内容YiiApplicationInitializationToolv1.0你希望应用在哪个环境下初始化?[0]Development[1]ProductionYourchoice[0-1,or"q"toquit]0在“开发”环境下初始化应用程序?[yes|no]yes开始初始化...修改数据库连接属性打开common\config\main-local.php,配置数据库连接信息'db'=>['class'=>'yii\db\Connection','dsn'=>'mysql:host=127.0.0.1;dbname=yii','username'=>'root','password'=>'root','charset'=>'utf8',],执行迁移数据库migration./yiimigrate复制backend目录,命名为apiopenapi\config\main.php修改id,controllerNamespace等,将所有backend替换为api:return['id'=>'app-api','basePath'=>目录名(__DIR__),'controllerNamespace'=>'api\controllers',]openapi\config\main.php开启url路由美化规则'urlManager'=>['enablePrettyUrl'=>true,'showScriptName'=>false,'rules'=>[],],开启common\config\bootstrap.php添加以下别名Yii::setAlias('@api',dirname(dirname(__DIR__)).'/api');为什么要单独创建一个API应用,方便维护,避免以下问题配置的冲突控制器的命名不便。URL美化规则冲突分工。很明显frontend就是前台目录;backend为后台目录;UserController,代码如下:['enablePrettyUrl'=>true,'enableStrictParsing'=>true,'showScriptName'=>false,'rules'=>[['class'=>'yii\rest\UrlRule','controller'=>'user'],],]...好的,现在它变成了RESTful风格的API,看似没有在controller中写什么,只是指定了一个model,但背后却完成了很多功能,列表如下:GET/users:逐页列出所有用户HEAD/users:显示用户列表摘要信息POST/users:创建新用户GET/users/123:返回用户123的详细信息HEAD/users/123:显示用户123的概览信息PATCH/users/123:和PUT/users/123:更新user123DELETE/users/123:删除用户123OPTIONS/users:显示/users端支持的动词OPTIONS/users/123:显示/users/123端支持的动词如何访问?可以使用curl命令访问,命令如下:curl-i-H"Accept:application/json""http://localhost/users"命令行还是挺麻烦的,测试也不方便。推荐的API测试工具等工具有很多,这里就不一一列举了。这里推荐Postman,非常好用,功能强大。Chorme还有一个插件可以安装。这里我推荐直接下载软件安装调试。它更方便。你可能会发现访问任何路由地址都添加了s,users,why什么?资源,你需要理解资源这个词。既然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['更新']);取消设置($动作关于['删除']);}publicfunctionactionIndex(){//你的代码}}所以我们可以重写他的代码哈哈,让我们创建一个我们自己的新动作['enablePrettyUrl'=>true,'enableStrictParsing'=>true,'showScriptName'=>false,'rules'=>[['class'=>'yii\rest\UrlRule','controller'=>'user',//'pluralize'=>false,//设置为false去掉复数形式'extraPatterns'=>['GETsend-email'=>'test'],],],]然后再访问就没有问题了,ps:自己写的任何action都必须配置在extraPatterns中再次感谢:https://segmentfault.com/一个/11...
