Yii2使用驼峰命名的形式访问控制器(实例讲解)
yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的全球资源定位器(统一资源定位符)中要改成横线的形式。例如:
公共函数actionRoomUpdate(){//}//访问的时候就要www.test.com/room-update这样访问最近在做某渠道的直连的时候,他们提供的文档上明确指出接口的形式:
刚开始以为YII中肯定有这样的设置,然后就去谷歌了下,发现都说不行,自己去看了下,果然,框架里面直接是写死的:(源码)\供应商\ yiisoft \ yii 2 \ base \控制器。服务器端编程语言(Professional Hypertext Preprocessor的缩写)
/** *根据给定的操作标识创建一个操作。*该方法首先检查操作标识是否已在[[actions()]中声明。如果是,*它将使用在那里声明的配置来创建动作对象。*如果不是,它将寻找一个控制器方法,其名称的格式为"动作Xyz其中“Xyz”代表动作标识。如果找到,将创建并返回一个[[InlineAction]]表示该*方法* @param字符串$id操作身份证.* @返回新创建的动作实例。如果该标识没有解析为任何操作,则为空*/公共函数创建操作($ id){ if($ id==' '){ $ id=$ this-DefaultAction;} $ actionMap=$ this-actions();if(isset($ action map[$id]){ return yii 3360: create object($ action map[$ id],[$ id,$ this]);} else if(preg_match('/^[a-z0-9\\-_)$/',$id)str pos($ id,'-')==false trim($ id,'-')===$id) { $methodName='action ' .str_replace(“”、“”、ucwords(inquide(“”、explode(“-”、$ id));if (method_exists($this,$ method name)){ $ method=new \ ReflectionMethod($ this,$ method name);if($ method-isPublic()$ method-getName()===$ method name){ 0返回new InlineAction($id,$this,$方法名);} } }返回null}这点有点低,不过问题倒不大,这个代码很容易理解,我们发现,其实如果在这个源码的基础上再加上一个其他就可以搞定,但是还是不建议直接改源码。
由于我们的项目用的事yii2的先进的版本,并且里面有多个项目,还要保证其他项目使用正常(也就是个别的控制器才需要使用驼峰命名的方式访问),这也容易:
我们可以写个成分处理:\公共\组件\ z控制器。服务器端编程语言(Professional Hypertext Preprocessor的缩写)
?php/** *由PhpStorm创建*用户: Steven *日期: 2017/10/26 *时间: 16:50 */命名空间common \ components使用\ yii \ base \控制器使用yii \ base \ InlineAction类z控制器扩展了控制器//这里需要继承自\ yii \ base \ Controller {/* * *作者: Steven * desc :重写路由,处理访问控制器支持驼峰命名法* @ param字符串$ id * @返回null |对象| InLineAction */public函数createAction($ id){ if($ id==' '){ $ id=$ this-DefaultAction;} $ actionMap=$ this-actions();if(isset($ action map[$id]){ return \ yii 3360: create object($ action map[$ id],[$ id,$ this]);} else if(preg_match('/^[a-z0-9\\-_)$/',$id)str pos($ id,'-')==false trim($ id,'-')===$id) { $methodName='action ' .str_replace(“”、“”、ucwords(inquide(“”、explode(“-”、$ id));if (method_exists($this,$ method name)){ $ method=new \ ReflectionMethod($ this,$ method name);if($ method-isPublic()$ method-getName()===$ method name){ 0返回new InlineAction($id,$this,$方法名);} } } else { $methodName='action ' .$ idif (method_exists($this,$ method name)){ $ method=new \ ReflectionMethod($ this,$ method name);if($ method-isPublic()$ method-getName()===$ method name){ 0返回new InlineAction($id,$this,$方法名);} } }返回null} }好的,这就可以支持使用驼峰形式访问了,当然这个的形式很多,也可以写成一个控制器,然后其它控制器继承这个控制器就行了,但是原理是一样的
如果使用?是需要用驼峰命名形式访问的控制器中,继承下这个z控制器就可以了,
?php/** *由PhpStorm创建*用户:史蒂文*日期: 2017/10/18 *时间: 15:57 */命名空间后端\模块\酒店\控制器;使用yii \筛选器\访问控制使用yii \筛选器\内容协商者使用yii \ web \响应使用通用组件控制器;类QunarController扩展了zController { public $ enableCsrfValidation=false;公共函数行为(){ $ behaviors=parent : behaviors();unset($ behaviors[' authenticator ']);$ behaviors[' CORS筛选器']=[' class '=\ yii \ filters \ CORS :类名(),' cors'=[ //限制对访问控制请求方法'=[' *],//只允许邮政和放方法访问控制请求头'=[' *],//只允许头X-Wsse ' '访问控制-允许-凭据'=true,//允许选项缓存访问控制-最大年龄'=3600,//允许访问控制-公开-标题=[' X-分页-当前页'],],];//配置内容谈判者支持JSON和可扩展置标语言响应格式/* $ behaviors[' content communicator ']=[' class '=content communicator :3360 class name(),' formats '=[' application/XML '=response :3360 format _ XML]];*/$行为[' access ']=[' class '=访问控制:类名(),' rules '=[' IPS '=[' 119。254 .26。*', //去哪儿互联网协议(互联网协议)访问白名单'127.0.0.1','106.14.56.77','180.168.4.58' //蜘蛛及本地互联网协议(互联网协议)访问白名单],' allow'=true,],],];返回$行为;}}?示例:
/* * *作者:史蒂文* desc :酒店静态数据接口*/public function actiongetfullhotelifo(){ }访问的时候全球资源定位器(统一资源定位符)为www.test.com/getFullHotelInfo
以上这篇Yii2使用驼峰命名的形式访问控制器(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
版权声明:Yii2使用驼峰命名的形式访问控制器(实例讲解)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。