-
Yii 中实现 Restful 风格 api 的步骤
- 创建继承自 ActiveRecord 的 model 类
- 创建 controller 继承 yii\rest\ActiveController,设置 $modelClass 属性
namespace app\controllers; use yii\rest\ActiveController; class UserController extends ActiveController { public $modelClass = 'app\models\User'; }
- 配置 URL 规则
- 启用 JSON 输入
'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ]
-
代码实践:写一个 /articles/:id/visited API,每次访问 MongoDB 中 article 表中 visited + 1。
-
环境:
- PHP -7.1.33
- Yii2 -2.0.36
- yii2-mongodb -2.1.9
-
Tips
- 本文着重代码逻辑编写,不侧重许多环境的配置,包括 PHP,MongoDB,Yii2,composer 等安装配置。
-
新建一个项目 basic
- composer create-project yiisoft/yii2-app-basic basic
-
使用 composer 在项目根目录(即 basic)下安装 yii2-mongodb 扩展
- composer require --prefer-dist yiisoft/yii2-mongodb
-
主要修改三个文件:
-
第一个文件:basic/config/web.php
- request 中加入以下代码,JSON 输入:
'request' => [ // ... 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ]
- 修改默认 db 为 mongodb,以及 url 配置,注意下列代码 dsn 中的数据库用户名及密码配置,配置自行搜索,这不是本文重点。url 的配置是为了符合 restful api 风格:
'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://username:pwd@localhost:27017/yii2basic', ], 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ 'PUT <controller:[\w-]+>s/<id:>' => '<controller>/update', 'GET <controller:[\w-]+>s/<id:[0-9]>' => '<controller>/view', 'DELETE <controller:[\w-]+>s/<id:>' => '<controller>/delete', 'POST <controller:[\w-]+>s' => '<controller>/create', 'GET <controller:[\w-]+>s' => '<controller>/index', '<controller:[\w-]+>s/<action:[\w-]+>' => '<controller>/<action>', '<controller:[\w-]+>s/<id:>/<action:[\w-]+>' => '<controller>/<action>', ], ],
-
第二个文件:basic/controller/ArticleController.php,这个文件是新建的,代码如下:
<?php namespace app\controllers; use yii\rest\ActiveController; use app\models\Article; class ArticleController extends ActiveController { public $modelClass = 'app\models\Article'; public function actionVisited($id) { $article = Article::findOne(['_id' => $id]); $article->visited = $article->visited + 1; $article->save(); } }
- 第三个文件如下:basic/models/Article.php,新建文件,代码如下:
<?php namespace app\models; use yii\mongodb\ActiveRecord; class Article extends ActiveRecord { public function attributes() { return ['_id', 'visited']; } public function fields() { return ['visited']; } public function safeAttributes() { return ['visited']; } }
-
-
根目录 basic 下启动服务器:
php yii serve
,我们没有编写 basic/views 下的文件,所以直接在浏览器访问localhost:8080
是不起作用的,并没有视图可以展示,在这里使用一个工具–Postman,下载地址:Downloads -
如何使用这个工具,各位自行探索吧
- GET 请求 url: http://localhost:8080/articles/index,获取数据库中的所有数据
- GET 请求 url: http://localhost:8080/articles/5f1fcf4bf2c279152b73af75/visited,中间的一串字符为 mongodb 中插入数据时自动添加的 ObjectId,以这个 id 搜索数据,就会使得数据中的 visited 字段值加 1。
Yii 中实现 Restful 风格的一个API
最新推荐文章于 2024-05-09 16:41:33 发布