宝哥软件园

Yii2使用驼峰命名的形式访问控制器的示例代码

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的全球资源定位器(统一资源定位符)中要改成横线的形式。例如:

公共函数actionRoomUpdate(){//}//访问的时候就要www.test.com/room-update这样访问最近在做某渠道的直连的时候,他们提供的文档上明确指出接口的形式:

刚开始以为YI2中肯定有这样的设置,然后就去谷歌了下,发现都说不行,自己去看了下,果然,框架里面直接是写死的:(源码)供应商 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使用驼峰命名的形式访问控制器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

更多资讯
游戏推荐
更多+