Yii フレームワークのソースコード解析とコントローラーコードの作成_PHP チュートリアル
Yii フレームワークを使用した URL パスは通常、hostname/?r=xxxx/xxxx/xxxx&sdfs=dsfdsf の形式になります
保護されたディレクトリ内のコントローラーが使用される場合と、モジュール内のコントローラーが使用される場合があることがわかります。具体的にはどのように処理されるのでしょうか? 以下の分析を参照してください:
以下のコードは yii フレームワークのコア コード %Yiiroot%/framework/web/CWebApplication.php からの抜粋です
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;
}
;

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









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

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

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

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

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

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

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