アクセスコントローラにキャメルケースネーミングを使用した Yii2 の分析例
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>
以上がアクセスコントローラにキャメルケースネーミングを使用した Yii2 の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

yii2 から jquery を削除する方法: 1. AppAsset.php ファイルを編集し、変数 $depends の「yii\web\YiiAsset」値をコメント アウトします; 2. main.php ファイルを編集し、設定「'yii」を以下に追加しますフィールド「components」\web\JqueryAsset' => ['js' => [],'sourcePath' => null,]," を使用して jquery スクリプトを削除します。

Realme 携帯電話でフォルダーを作成するためのステップバイステップ ガイド 日常生活では、写真、ビデオ、ドキュメントなどを含むさまざまなファイルを保存するために携帯電話を使用します。ただし、時間が経つにつれて、携帯電話上のファイルの数が増加し、携帯電話のメモリが不足したり、ファイルの管理が困難になったりする可能性があります。ファイルをより適切に整理し、携帯電話の使用効率を向上させるために、携帯電話フォルダーの確立が特に重要になっています。 Realme Mobile は、強力なシステムと多様な機能を備えた人気のスマートフォン ブランドです。 Realme 携帯電話でフォルダーを作成すると、ユーザーはファイルをより適切に整理できます

Go 関数の命名エラーとその対策: 空の名前を避け、わかりやすい名前を使用します。長い名前を避け、略語または簡潔な用語を使用してください。一貫性を保つために関数名には小文字を使用してください。コードをわかりやすくするために、アンダースコアの使用は避けてください。名前が関数と一致しており、関数の機能を正確に反映していることを確認してください。

C++ のすべて大文字の命名規則は、関数名にすべて大文字を使用する関数の命名規則で、通常、名前の混乱を避けるためにマクロ定義やインライン関数に使用されます。文法:(){...}。例: inlineintADD_NUMBERS(inta,intb){}、この関数は 2 つの数値の合計を計算します。

この記事では、yii2 フレームワークについて紹介し、いくつかの CTF 演習を共有し、それを使用して yii2 フレームワークを学習します。

タイトル: Go 言語はなぜ Go と呼ばれるのですか? Go 言語 (Golang とも呼ばれます) は、Google によって開発されたプログラミング言語です。2009 年に最初にリリースされて以来、その人気は高まり続け、ネットワーク プログラミング、クラウド コンピューティング、ビッグデータなどのさまざまな分野で広く使用されています。処理待ち。しかし、なぜ Go という言葉が Go 言語の名前として選ばれたのか、多くの人が興味を持っています。この記事では、Go 言語が「Go」と名付けられた理由を探っていきます。まず、Go 言語は 200 年にちなんで名付けられました。

1. yii2-redis のマスター ブランチの Windows バージョンを、composer でダウンロードする必要があります。 2. 解凍して、vendor/yiisoft にコピーします。 3. 'yiisoft/yii2-redis'=>array('name'=>'yiisoft) を追加します。 yiisoft /yii2-redis','version'=>'2.0 の extensions.php にコピーします。
