ホームページ バックエンド開発 PHPチュートリアル Yii フレームワークのソースコード解析とコントローラーコードの作成_PHP チュートリアル

Yii フレームワークのソースコード解析とコントローラーコードの作成_PHP チュートリアル

Jul 21, 2016 pm 03:27 PM
controller url yii 一般的に コード 使用 分析する 作成する フレーム ソースコード パス

Yii フレームワークを使用した URL パスは通常、hostname/?r=xxxx/xxxx/xxxx&sdfs=dsfdsf の形式になります

保護されたディレクトリ内のコントローラーが使用される場合と、モジュール内のコントローラーが使用される場合があることがわかります。具体的にはどのように処理されるのでしょうか? 以下の分析を参照してください:

以下のコードは yii フレームワークのコア コード %Yiiroot%/framework/web/CWebApplication.php からの抜粋です

コードは次のとおりです以下:
============ ================================= ================= ================================ ====
//1.runController はコントローラーを実行するメソッドです $route は $_GET['r']
public function runController($route)
{
//ここで createController を呼び出してコントローラーのインスタンスを作成します。 createController がコントローラーを選択するためのキーであることがわかります
if(($ca= $this->createController($route))!==null)
{
list($controller,$actionID)=$ ca;
$oldController=$this->_controller= $controller->init();
$this- >_controller=$oldController;
}
else
throw new CHttpException(404,Yii:: t('yii','リクエスト "{route}" を解決できません。',
array('{route}'= >$route===''?$this->defaultController:$route)) );
}
======================= ======================== ========================= ======================== ===
//2 次に、アクセスするルートが site/contact
public 関数であると仮定して、createController を分析します。 createController($route,$owner=null)
{
//初めてこの関数に入るとき、$owner パラメーターは空です
if($owner===null)
$owner=$this;
// $route パラメーターに / が含まれていない場合は、デフォルトのコントローラー
if(($route=trim($route,'/' ))==='')
$route=$owner->defaultController; を使用します。 $caseSensitive=$this->getUrlManager()->caseSensitive;
//次のループを完全に実行するには、$route を
$route の後に追加します。='/'
//位置を保存します。 of / in $pos
while(($pos=strpos($route,'/'))!==false)
{
//$id は前半、つまりサイト
$id=substr($ルート,0,$pos);
if(!preg_match('/^w+$/',$id))
if( !$caseSensitive)
$id=strto lower($id); $route は後半、つまり contact になります
$route=(string)substr($route,$pos+1);
//コントローラーのルートディレクトリまたはサブディレクトリのプレフィックス
if(!isset($basePath)) //最初のセグメント
{
//初めてのエントリ、$owner は空です、そのようなメンバー変数はありません
//初めてのエントリではないか、$owner に値がある可能性があります。このメンバー変数は設定されています。CWebModule クラスを参照してください
if (isset($owner->controllerMap[$id]))
{
return array(
Yii::createComponent($owner->controllerMap[$id],$ id,$owner===$this?null) :$owner),
$this->parseActionParams($route),
);
}
// getModule メソッドを通じて独立したモジュールを取得できる場合は、再度 createController を呼び出します (site がモジュール名の場合に適用されます)。 protected/config/main.php 設定ファイルを参照してください。たとえば、コントローラーは %webroot%/protected/module/site/controller/ContactController.php にあります
if(($module=$ owner->getModule($id) ))!==null)
return $this->createController($route,$module);
//コントローラーのディレクトリ:
//CWebApplication の場合、config['basePath' ] に対応 (構成ファイルを参照) ./controller/、たとえば、コントローラーは %webroot%/protected/controller/SiteController.php にあります
//CModule のサブクラスの場合、サブクラスが配置されているフォルダーに対応します。/controller/、たとえば、次の場合コントローラーは %webroot%/protected/module/site/controller/ContactController.php にあります
$basePath=$owner->getControllerPath();
}
else
$controllerID.=' /' ;
$className=ucfirst($id).'Controller';
$classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php';
//$classFile が存在する場合、取得したコントローラー クラス ファイルのパスに応じて上記では、クラス インスタンスを作成します
// 存在しない場合は、サブディレクトリ内のコントローラーです。ループを続けて最終的なコントローラーを見つけます。たとえば、コントローラーは %webroot%/protected/controller/somedir/SiteController にあります。
if(is_file($classFile))
{
if(!class_exists($className,false))
require($classFile)
if(class_exists($className,false) && is_subclass_of($className,'CController'); )
{
$id[0] =strto lower($id[0]);
return array(
new $className($controllerID.$id,$owner===$this?null:$owner),
$ this->parseActionParams($route) ,
);
$controllerID.=$id;
}
;

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/323762.html技術記事 Yii フレームワークを使用する URL パスは通常、hostname/?r=xxxx/xxxx/xxxxgt;createController($route))!==null) { list($controller,$actionID)=$ca; の形式になります。 =$this- _コントローラー $this-_con...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

清華大学と Zhipu AI オープンソース GLM-4: 自然言語処理に新たな革命を起こす 清華大学と Zhipu AI オープンソース GLM-4: 自然言語処理に新たな革命を起こす Jun 12, 2024 pm 08:38 PM

2023 年 3 月 14 日に ChatGLM-6B が発売されて以来、GLM シリーズ モデルは幅広い注目と認知を得てきました。特にChatGLM3-6Bがオープンソース化されてからは、Zhipu AIが投入する第4世代モデルに対する開発者の期待が高まっている。 GLM-4-9B のリリースにより、この期待はついに完全に満たされました。 GLM-4-9B の誕生 小型モデル (10B 以下) により強力な機能を提供するために、GLM 技術チームはこの新しい第 4 世代 GLM シリーズ オープン ソース モデル、GLM-4-9B をほぼ半年の期間を経て発売しました。探検。このモデルは、精度を確保しながらモデルサイズを大幅に圧縮し、推論速度の高速化と効率化を実現しています。 GLM 技術チームの調査はまだ終わっていない

Java フレームワークの商用サポートの費用対効果を評価する方法 Java フレームワークの商用サポートの費用対効果を評価する方法 Jun 05, 2024 pm 05:25 PM

Java フレームワークの商用サポートのコスト/パフォーマンスを評価するには、次の手順が必要です。 必要な保証レベルとサービス レベル アグリーメント (SLA) 保証を決定します。研究サポートチームの経験と専門知識。アップグレード、トラブルシューティング、パフォーマンスの最適化などの追加サービスを検討してください。ビジネス サポートのコストと、リスクの軽減と効率の向上を比較検討します。

Bitget Launchpool とは何ですか? Bitget Launchpool の使用方法? Bitget Launchpool とは何ですか? Bitget Launchpool の使用方法? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool は、すべての暗号通貨愛好家向けに設計された動的プラットフォームです。 BitgetLaunchpool はそのユニークな製品で際立っています。ここでは、トークンを賭けて、エアドロップ、高額な報酬、初期参加者限定の寛大な賞金プールなど、より多くの報酬のロックを解除できます。 BitgetLaunchpool とは何ですか? BitgetLaunchpool は、ユーザーフレンドリーな利用規約でトークンをステークして獲得できる暗号通貨プラットフォームです。 Launchpool に BGB またはその他のトークンを投資することで、ユーザーは無料のエアドロップや収益を受け取り、寛大なボーナス プールに参加する機会が得られます。質入れられた資産からの収入は T+1 時間以内に計算され、報酬は以下に基づいて計算されます。

PHP フレームワークの学習曲線は他の言語フレームワークと比較してどうですか? PHP フレームワークの学習曲線は他の言語フレームワークと比較してどうですか? Jun 06, 2024 pm 12:41 PM

PHP フレームワークの学習曲線は、言語熟練度、フレームワークの複雑さ、ドキュメントの品質、コミュニティのサポートによって異なります。 PHP フレームワークの学習曲線は、Python フレームワークと比較すると高く、Ruby フレームワークと比較すると低くなります。 Java フレームワークと比較すると、PHP フレームワークの学習曲線は中程度ですが、開始までの時間は短くなります。

PHP フレームワークの軽量オプションはアプリケーションのパフォーマンスにどのような影響を与えますか? PHP フレームワークの軽量オプションはアプリケーションのパフォーマンスにどのような影響を与えますか? Jun 06, 2024 am 10:53 AM

軽量の PHP フレームワークは、サイズが小さくリソース消費が少ないため、アプリケーションのパフォーマンスが向上します。その特徴には、小型、高速起動、低メモリ使用量、改善された応答速度とスループット、および削減されたリソース消費が含まれます。 実際のケース: SlimFramework は、わずか 500 KB、高い応答性と高スループットの REST API を作成します。

Mistral オープン ソース コード モデルが王位を獲得します。 Codestral は 80 を超える言語でのトレーニングに熱心に取り組んでおり、国内の Tongyi 開発者が参加を求めています。 Mistral オープン ソース コード モデルが王位を獲得します。 Codestral は 80 を超える言語でのトレーニングに熱心に取り組んでおり、国内の Tongyi 開発者が参加を求めています。 Jun 08, 2024 pm 09:55 PM

51CTO Technology Stack (WeChat ID: blog51cto) が制作、Mistral は最初のコードモデル Codestral-22B をリリースしました!このモデルのすごいところは、多くのコード モデルが無視する Swift などを含む 80 以上のプログラミング言語でトレーニングされていることだけではありません。それらの速度はまったく同じではありません。 Go言語を使用して「パブリッシュ/サブスクライブ」システムを記述する必要があります。ここでは GPT-4o が出力されており、Codestral は、見るのが難しいほど高速で論文を提出しています。発売されたばかりのモデルのため、まだ公的テストは行われていない。しかし、Mistral の担当者によると、Codestral は現在最もパフォーマンスの高いオープンソース コード モデルであるとのことです。写真に興味のある友達は次の場所に移動できます: - 顔を抱きしめる: https

さまざまなアプリケーションシナリオに最適な Golang フレームワークを選択する方法 さまざまなアプリケーションシナリオに最適な Golang フレームワークを選択する方法 Jun 05, 2024 pm 04:05 PM

アプリケーションのシナリオに基づいて最適な Go フレームワークを選択します。アプリケーションの種類、言語機能、パフォーマンス要件、エコシステムを考慮します。一般的な Go フレームワーク: Jin (Web アプリケーション)、Echo (Web サービス)、Fiber (高スループット)、gorm (ORM)、fasthttp (速度)。実際のケース: REST API (Fiber) の構築とデータベース (gorm) との対話。フレームワークを選択します。主要なパフォーマンスには fasthttp、柔軟な Web アプリケーションには Jin/Echo、データベース インタラクションには gorm を選択してください。

golang フレームワーク開発の実践的な詳細な説明: 質疑応答 golang フレームワーク開発の実践的な詳細な説明: 質疑応答 Jun 06, 2024 am 10:57 AM

Go フレームワーク開発における一般的な課題とその解決策は次のとおりです。 エラー処理: 管理にはエラー パッケージを使用し、エラーを一元的に処理するにはミドルウェアを使用します。認証と認可: サードパーティのライブラリを統合し、資格情報を確認するためのカスタム ミドルウェアを作成します。同時処理: ゴルーチン、ミューテックス、チャネルを使用してリソース アクセスを制御します。単体テスト: 分離のために getest パッケージ、モック、スタブを使用し、十分性を確保するためにコード カバレッジ ツールを使用します。デプロイメントとモニタリング: Docker コンテナを使用してデプロイメントをパッケージ化し、データのバックアップをセットアップし、ログ記録およびモニタリング ツールでパフォーマンスとエラーを追跡します。

See all articles