yii2框架-restful的自定义api(二十二)

昨天的大新闻---国家的相关监管部门正式出台了“网约车”的合法法规!滴滴,UBER,易到,神州专车等积极响应,表示支持网约车的新规!一方面看来是这些企业受益,其实从侧面映射中国的移动互联网中的o2o服务,分享经济和共享经济的模式已经在国家层面得到很好的支持,在管理,监管,安全,实惠等方面都会以法律的形式来规范责任。那么对于用户来说,这也是一件好事,因为我们以后做的车不再是黑车了。


中国的移动互联网的发展催生了很多新型的经济模式,这些模式从一定程度上是在改变人们的生活,促进社会的进步的。特别是关乎到老百姓的日常生活,安全食品的这些经济实体,政府也是在一步一步的论证“网约车”的合法性。分享经济的新业态模式下,必须要有更规范的出行规定来规范运营和责任主体,这对中国的出行市场是一个肯定和鼓励。


另外一个在无人驾驶的领域,目前百度和google是走在前面的,无论技术还是路段测试,两者的优势都是很大的。但是由于政府的监管制度不同,百度的无人驾驶计划在国内已经得到政府的政策支持--百度与安徽省芜湖市人民政府在北京正式签订合作协议,宣布将在芜湖共同建设“全无人驾驶汽车运营区域”。这种政策是有利于促进无人驾驶技术在中国出行市场的应用的,也是目前百度在政策上的优势。而美国对于无人驾驶的相关政策似乎还没有什么的规定,合法化,商业化的暂时不明!


啪啪啪,回归正题,继续关于restful风格的自定义api接口

上一节主要了解关于yii2的restful的基本入门,那么如果想不按照yii2默认规定的那些写接口来,如何重写或者自定义呢?

在yii\rest\ActiveController.php中

public function actions()
    {
        return [
            'index' => [
                'class' => 'yii\rest\IndexAction',
                'modelClass' => $this->modelClass,
                'checkAccess' => [$this, 'checkAccess'],
            ],
            'view' => [
                'class' => 'yii\rest\ViewAction',
                'modelClass' => $this->modelClass,
                'checkAccess' => [$this, 'checkAccess'],
            ],
            'create' => [
                'class' => 'yii\rest\CreateAction',
                'modelClass' => $this->modelClass,
                'checkAccess' => [$this, 'checkAccess'],
                'scenario' => $this->createScenario,
            ],
            'update' => [
                'class' => 'yii\rest\UpdateAction',
                'modelClass' => $this->modelClass,
                'checkAccess' => [$this, 'checkAccess'],
                'scenario' => $this->updateScenario,
            ],
            'delete' => [
                'class' => 'yii\rest\DeleteAction',
                'modelClass' => $this->modelClass,
                'checkAccess' => [$this, 'checkAccess'],
            ],
            'options' => [
                'class' => 'yii\rest\OptionsAction',
            ],
        ];
    }
这是默认的接口方法,那么如何重写呢?
我们可以在Controller中重写action()这个函数从而实现重写

namespace api\modules\v1\controllers;
use Yii;
use yii\rest\ActiveController;
use yii\data\ActiveDataProvider;
use api\models\Order;

class UsersController extends ActiveController {
	public $modelClass = 'api\modules\v1\models\User';
	
	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\rest\UrlRule',
            '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





  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值