本文汇总近日对YII2 restful的尝试和遇到的问题,希望读者如果解决了我的问题请告诉我下。
环境:1.yii2-basic 2.apache
1.搭建yii2-basic restufl
2.restful 相关测试
3.遗留问题
1.搭建yii2-basic restufl
config配置(请写到components里),这里有个坑 enableStringParsing 设置为true时,请把rules里的注释符号去掉. 没有详细设置路由解析的格式的话,会显示404.这里无法做到和资料的那样,尝试了很多次,必须要写详细规则(如果你们用资料里的方式成功了请留言).
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => true,
'rules' => [
#'<controller:\w+>/'=>'<controller>/',
#'<controller:\w+>/<id:\d+>' => '<controller>/view',
#'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
#'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
[
'class' => 'yii\rest\UrlRule',
'controller' => 'ntag' ,
],
]
],
.haccess 配置(此处不做解释)
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [L]
controller 代码 , actions里是设置对应actions ,class 为action 路径 app\controller\news\NewsAction (应用\controller\news目录下的NewsAction).应为restful api 父类接口中完成基本的操作,但是这个默认的方式用到的不会太多,常用的大多都需要逻辑处理,verbs action 的请求方式,
<?php
namespace app\controllers;
use yii\rest\ActiveController;
use yii\base\InvalidConfigException;
class NewsController extends ActiveController {
public $modelClass = 'app\models\News';
// public $updateScenario = Model::SCENARIO_DEFAULT;
// public $createScenario = Model::SCENARIO_DEFAULT;
public function actions() {
return [
'index' => [
'class' => 'app\controllers\news\NewsAction',
'modelClass' => $this->modelClass,
],
//'update' =>'app\controllers\news\UpdateAction',
];
}
protected function verbs(){
return [
'index'=>['GET','HEAD'],
];
}
}
action 代码 : return 可以输出;
<?php
namespace app\controllers\news;
use app\models\News;
class UpdateAction extends \yii\base\Action {
public $modelClass;
public function run() {
return 'aaa';
}
}
2基本配置到此为止,到这里基本上配置出了一个满足restful风格接口的controller,接下来的测试让我更加费解,我认为问题在urlmanager 解析上边,接下来的测试我会把问题罗列出来。
工具 postmam
- get 请求 controller rules规则第一条 host/natg
- get 请求 host/natg/ 注意url 多了/ .此处引入第一个问题 ,返回格式错误应该返回一带有status=404的JSON 或xml 而不是进入404页面,此处我怀疑是url解析错误(详细解试下,我对上边urlmananger 的理解,前四行基本路由解写规则,下便是restful api 解析.但是我认为我目前测试所走的解析方案是上边的基本规则,而不是restful api 解析,下一条我给出一个例子证实一下 )
- 此处为上述例子
- post create(或者delete) url:host/ntag/create ,再看到这个路由时,我就觉得有些问题 ,给出测试结果
有错的,直接把sql的错误给返回
正常的 返回你调教的信息
- put update url:host/natg/update 这是 我觉得 比较奇怪的 默认的updateaction竟然永远修改不成成功 ,(此处用ations 里的自己设置action没有测试)
为了证实此处url走的是 updateAction ,更换请求方式会有下下图
3.遗留问题
1.urlmanager 到底怎么解析的,yii\rest\UrlRule到底在什么时候起作用,
2. 目前对 yii2 retful api的理解是,get:host/controller/action get信息, post:host/controllers/action 提交信息(例如get: www.basic.com/natg/1 post:www.basic.com/natg/create 创建信息), 这方式不对吧,我对restful的理解是 对一个地址的不同请求的操作。唉今天就到这里的。此贴会随之我的了解深入不断更改。