yii2框架-restful的自定义api(二十二)
昨天的大新闻---国家的相关监管部门正式出台了“网约车”的合法法规!滴滴,UBER,易到,神州专车等积极响应,表示支持网约车的新规!一方面看来是这些企业受益,其实从侧面映射中国的移动互联网中的o2o服务,分享经济和共享经济的模式已经在国家层面得到很好的支持,在管理,监管,安全,实惠等方面都会以法律的形式来规范责任。那么对于用户来说,这也是一件好事,因为我们以后做的车不再是黑车了。
中国的移动互联网的发展催生了很多新型的经济模式,这些模式从一定程度上是在改变人们的生活,促进社会的进步的。特别是关乎到老百姓的日常生活,安全食品的这些经济实体,政府也是在一步一步的论证“网约车”的合法性。分享经济的新业态模式下,必须要有更规范的出行规定来规范运营和责任主体,这对中国的出行市场是一个肯定和鼓励。
另外一个在无人驾驶的领域,目前百度和google是走在前面的,无论技术还是路段测试,两者的优势都是很大的。但是由于政府的监管制度不同,百度的无人驾驶计划在国内已经得到政府的政策支持--百度与安徽省芜湖市人民政府在北京正式签订合作协议,宣布将在芜湖共同建设“全无人驾驶汽车运营区域”。这种政策是有利于促进无人驾驶技术在中国出行市场的应用的,也是目前百度在政策上的优势。而美国对于无人驾驶的相关政策似乎还没有什么的规定,合法化,商业化的暂时不明!
啪啪啪,回归正题,继续关于restful风格的自定义api接口
上一节主要了解关于yii2的restful的基本入门,那么如果想不按照yii2默认规定的那些写接口来,如何重写或者自定义呢?
我们可以在Controller中重写action()这个函数从而实现重写
b)actions方法的执行$actions = parent::actions();然后将$actions的需要重写的方法禁用(删除),然后return $actions 就没有这个方法了,所以就会执行内联操作actionIndex()这个方法,而我们的重写业务就是在这个actionIndex()方法中。其他的方法也是这样子重写。
如果我们想在自己定义不同的api接口方法呢?
那么我们可以通过配置实现,在main.php的主文件中
a)"GET versions" => "version",代表获取接口版本,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/versions ,对应的内联操作actionVersion();
c)"POST newusers" => "add",代表添加一个用户,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/newusers,对应的内联操作actionAdd();
中国的移动互联网的发展催生了很多新型的经济模式,这些模式从一定程度上是在改变人们的生活,促进社会的进步的。特别是关乎到老百姓的日常生活,安全食品的这些经济实体,政府也是在一步一步的论证“网约车”的合法性。分享经济的新业态模式下,必须要有更规范的出行规定来规范运营和责任主体,这对中国的出行市场是一个肯定和鼓励。
另外一个在无人驾驶的领域,目前百度和google是走在前面的,无论技术还是路段测试,两者的优势都是很大的。但是由于政府的监管制度不同,百度的无人驾驶计划在国内已经得到政府的政策支持--百度与安徽省芜湖市人民政府在北京正式签订合作协议,宣布将在芜湖共同建设“全无人驾驶汽车运营区域”。这种政策是有利于促进无人驾驶技术在中国出行市场的应用的,也是目前百度在政策上的优势。而美国对于无人驾驶的相关政策似乎还没有什么的规定,合法化,商业化的暂时不明!
啪啪啪,回归正题,继续关于restful风格的自定义api接口
上一节主要了解关于yii2的restful的基本入门,那么如果想不按照yii2默认规定的那些写接口来,如何重写或者自定义呢?
在yii estActiveController.php中
public function actions()
{
return [
"index" => [
"class" => "yii
estIndexAction",
"modelClass" => $this->modelClass,
"checkAccess" => [$this, "checkAccess"],
],
"view" => [
"class" => "yii
estViewAction",
"modelClass" => $this->modelClass,
"checkAccess" => [$this, "checkAccess"],
],
"create" => [
"class" => "yii
estCreateAction",
"modelClass" => $this->modelClass,
"checkAccess" => [$this, "checkAccess"],
"scenario" => $this->createScenario,
],
"update" => [
"class" => "yii
estUpdateAction",
"modelClass" => $this->modelClass,
"checkAccess" => [$this, "checkAccess"],
"scenario" => $this->updateScenario,
],
"delete" => [
"class" => "yii
estDeleteAction",
"modelClass" => $this->modelClass,
"checkAccess" => [$this, "checkAccess"],
],
"options" => [
"class" => "yii
estOptionsAction",
],
];
}这是默认的接口方法,那么如何重写呢?我们可以在Controller中重写action()这个函数从而实现重写
namespace apimodulesv1controllers;
use Yii;
use yii
estActiveController;
use yiidataActiveDataProvider;
use apimodelsOrder;
class UsersController extends ActiveController {
public $modelClass = "apimodulesv1modelsUser";
public function actions() {
$actions = parent::actions();
// 禁用""index,delete" 和 "create" 操作
unset($actions["index"],$actions["delete"], $actions["create"]);
return $actions;
}
//重写index的业务实现
public function actionIndex()
{
$modelClass = $this->modelClass;
return new ActiveDataProvider([
"query" => $modelClass::find()->asArray(),
"pagination" => false
]);
}
}a)因为访问的时候先去执行actions方法里面的对应独立操作,如果找不到再去找对应的内联操作。b)actions方法的执行$actions = parent::actions();然后将$actions的需要重写的方法禁用(删除),然后return $actions 就没有这个方法了,所以就会执行内联操作actionIndex()这个方法,而我们的重写业务就是在这个actionIndex()方法中。其他的方法也是这样子重写。
如果我们想在自己定义不同的api接口方法呢?
那么我们可以通过配置实现,在main.php的主文件中
"urlManager" => [
"enablePrettyUrl" => true,
"showScriptName" => false,
"rules" => [
[
"class" => "yii
estUrlRule",
"controller" => ["v1/users"],
"pluralize" => false,
"extraPatterns" => [
"GET versions" => "version",
"GET search/<id:d+>" => "search",
"POST newusers" => "add"
],
],
],
],"extraPatterns"这个属性是额外模式配置a)"GET versions" => "version",代表获取接口版本,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/versions ,对应的内联操作actionVersion();
b)"GET searches/<id:d+>" => "search", 代表搜索一个指定id的用户,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/searches/1,对应的内联操作actionSearches();
c)"POST newusers" => "add",代表添加一个用户,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/newusers,对应的内联操作actionAdd();
我们只需要在控制器中实现这些方法,完成相应的逻辑业务,那么各个需要的接口就完成了。
友情推荐
本人已开源基于swoole扩展实现的轻量级框架
https://github.com/bingcool/swoolefy
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: yii2框架-理解yii2的架构(一)
- 下一篇: yii2框架-console的cli模式(二十)
