


yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的url中要改成横线的形式。例如:
} //访问的时候就要www.test.com/room-update这样访问
最近在做某渠道的直连的时候,他们提供的文档上明确指出接口的形式:
刚开始以为YII2中肯定有这样的设置,然后就去google了下,发现都说不行,自己去看了下,果然,框架里面直接是写死的:(源码)\vendor\yiisoft\yii2\base\Controller.php
/** * Creates an action based on the given action ID. * The method first checks if the action ID has been declared in [[actions()]]. If so, * it will use the configuration declared there to create the action object. * If not, it will look for a controller method whose name is in the format of `actionXyz` * where `Xyz` stands for the action ID. If found, an [[InlineAction]] representing that * method will be created and returned. * @param string $id the action ID. * @return Action the newly created action instance. Null if the ID doesn't resolve into any action. */ public function createAction($id) { if ($id === '') { $id = $this->defaultAction; } $actionMap = $this->actions(); if (isset($actionMap[$id])) { return Yii::createObject($actionMap[$id], [$id, $this]); } elseif (preg_match('/^[a-z0-9\\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) { $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id)))); if (method_exists($this, $methodName)) { $method = new \ReflectionMethod($this, $methodName); if ($method->isPublic() && $method->getName() === $methodName) { return new InlineAction($id, $this, $methodName); } } } return null; }
这点有点low,不过问题倒不大,这个代码很容易理解,我们发现,其实如果在这个源码的基础上再加上一个else就可以搞定,但是还是不建议直接改源码。
由于我们的项目用的事yii2的advanced版本,并且里面有多个项目,还要保证其他项目使用正常(也就是个别的控制器才需要使用驼峰命名的方式访问),这也容易:
我们可以写个components处理:\common\components\zController.php
<?php/** * Created by PhpStorm. * User: Steven * Date: 2017/10/26 * Time: 16:50 */namespace common\components;use \yii\base\Controller;use yii\base\InlineAction;class zController extends Controller //这里需要继承自\yii\base\Controller{ /** * Author:Steven * Desc:重写路由,处理访问控制器支持驼峰命名法 * @param string $id * @return null|object|InlineAction */ public function createAction($id) { if ($id === '') { $id = $this->defaultAction; } $actionMap = $this->actions(); if (isset($actionMap[$id])) { return \Yii::createObject($actionMap[$id], [$id, $this]); } elseif (preg_match('/^[a-z0-9\\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) { $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id)))); if (method_exists($this, $methodName)) { $method = new \ReflectionMethod($this, $methodName); if ($method->isPublic() && $method->getName() === $methodName) { return new InlineAction($id, $this, $methodName); } } } else { $methodName = 'action' . $id; if (method_exists($this, $methodName)) { $method = new \ReflectionMethod($this, $methodName); if ($method->isPublic() && $method->getName() === $methodName) { return new InlineAction($id, $this, $methodName); } } } return null; } }
ok ,这就可以支持使用驼峰形式访问了,当然这个的形式很多,也可以写成一个控制器,然后其它控制器继承这个控制器就行了,但是原理是一样的
如果使用? 是需要用驼峰命名形式访问的控制器中,继承下这个zController就可以了,
<?php/** * Created by PhpStorm. * User: Steven * Date: 2017/10/18 * Time: 15:57 */namespace backend\modules\hotel\controllers;use yii\filters\AccessControl;use yii\filters\ContentNegotiator;use yii\web\Response;use common\components\zController;class QunarController extends zController{ public $enableCsrfValidation = false; public function behaviors() { $behaviors = parent::behaviors(); unset($behaviors['authenticator']); $behaviors['corsFilter'] = [ 'class' => \yii\filters\Cors::className(), 'cors' => [ // restrict access to 'Access-Control-Request-Method' => ['*'], // Allow only POST and PUT methods 'Access-Control-Request-Headers' => ['*'], // Allow only headers 'X-Wsse' 'Access-Control-Allow-Credentials' => true, // Allow OPTIONS caching 'Access-Control-Max-Age' => 3600, // Allow the X-Pagination-Current-Page header to be exposed to the browser. 'Access-Control-Expose-Headers' => ['X-Pagination-Current-Page'], ], ]; //配置ContentNegotiator支持JSON和XML响应格式 /*$behaviors['contentNegotiator'] = [ 'class' => ContentNegotiator::className(), 'formats' => [ 'application/xml' => Response::FORMAT_XML ] ];*/ $behaviors['access'] = [ 'class' => AccessControl::className(), 'rules' => [ [ 'ips' => ['119.254.26.*', //去哪儿IP访问白名单 '127.0.0.1','106.14.56.77','180.168.4.58' //蜘蛛及本地IP访问白名单 ], 'allow' => true, ], ], ]; return $behaviors; }}?>
示例:
<span style="color: #008000">/*</span><span style="color: #008000">* * Author:Steven * Desc:酒店静态数据接口 </span><span style="color: #008000">*/</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> actiongetFullHotelInfo() { }</span>
The above is the detailed content of Example analysis of Yii2 using camel case naming to access controllers. For more information, please follow other related articles on the PHP Chinese website!

在C++函数命名中,考虑参数顺序至关重要,可提高可读性、减少错误并促进重构。常见的参数顺序约定包括:动作-对象、对象-动作、语义意义和遵循标准库。最佳顺序取决于函数目的、参数类型、潜在混淆和语言惯例。

yii2去掉jquery的方法:1、编辑AppAsset.php文件,注释掉变量$depends里的“yii\web\YiiAsset”值;2、编辑main.php文件,在字段“components”下面添加配置为“'yii\web\JqueryAsset' => ['js' => [],'sourcePath' => null,],”即可去掉jquery脚本。

Go函数命名错误及应对策略:避免空洞名称,使用描述性名称。避免冗长名称,使用缩略语或简洁术语。使用小写字母命名函数,保持一致性。避免使用下划线,保持代码清晰。确保名称与功能一致,准确反映函数功能。

C++全大写命名法是一种为函数命名的约定,其中函数名全部使用大写字母,通常用于宏定义和内联函数,以避免名称混淆。语法:(){...}。如:inlineintADD_NUMBERS(inta,intb){},该函数计算两个数字的和。

真我手机文件夹建立步骤指南在日常生活中,我们使用手机来存储各种各样的文件,包括照片、视频、文档等等。然而,随着时间的推移,手机上的文件可能会越来越多,导致手机内存不足或文件难以管理。为了更好地整理文件并提高手机使用效率,手机文件夹的建立变得尤为重要。真我手机是一款受欢迎的智能手机品牌,拥有强大的系统和多样的功能。在真我手机上建立文件夹可以帮助用户更好地整理文

标题:Go语言名为何为Go的原因是什么?Go语言(也称为Golang)是一种由Google开发的编程语言,自2009年首次发布以来,其受欢迎程度不断增长,被广泛应用于各种领域,包括网络编程、云计算、大数据处理等。然而,许多人对于Go语言的命名为何选择了"Go"这个单词感到好奇。在本文中,我们将探究Go语言被命名为“Go”的原因。首先,Go语言的命名是在200

Go语言,也称为Golang,是由谷歌公司开发的一种编程语言。它的设计目标是兼顾高效性、可读性和简洁性。Go语言在云计算、大数据处理、网络编程等领域得到了广泛的应用。然而,对于许多人来说,Go语言的一个疑问是:为什么选择将这门语言命名为“Go”?Go语言的起源可以追溯到2007年,当时由三位谷歌工程师RobertGriesemer、RobPike和Ken


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver CS6
Visual web development tools

WebStorm Mac version
Useful JavaScript development tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.