CI フレームワークのソース コードの読み取り----------Router.php_PHP チュートリアル
defined
php
フレーム
ソースコード
読む
[php]
/**
* コードイグナイター
*
* PHP 5.1.6 以降用のオープンソース アプリケーション開発フレームワーク
*
* @package CodeIgniter
* @author ExpressionEngine 開発チーム
* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since バージョン 1.0
* @filesource
*/
// ----------------------------------------------- ------------------------
/**
* ルータークラス
*
* URI を解析し、ルーティングを決定します
*
* @package CodeIgniter
* @subpackage ライブラリ
* @author ExpressionEngine 開発チーム
* @category ライブラリ
* @link http://codeigniter.com/user_guide/general/routing.html
*/
クラス CI_Router {
/**
* 構成クラス
* 配置
* @var オブジェクト
* @access public
*/
var $config;
/**
* 路線一覧
* ルートリスト、値はAPPPATH/config/route.phpから取得されます
* @var 配列
* @アクセス公開
*/
var $routes = array();
/**
* エラールートのリスト
* エラールーティングリスト
* @var 配列
* @アクセス公開
*/
var $error_routes = array();
/**
* 現在のクラス名
* URI中のコントローラー
* @var 文字列
* @access public
*/
var $class = '';
/**
* 現在のメソッド名
* 呼び出された関数はURIで表示され、デフォルトはindex()です
* @var 文字列
* @アクセス公開
*/
var $method = 'インデックス';
/**
* 要求されたコントローラー クラスを含むサブディレクトリ
* URI 内の実際のディレクトリ情報
* @var 文字列
* @アクセス公開
*/
var $directory = '';
/**
* デフォルトのコントローラー (および特定の場合はメソッド)
*デフォルトコントローラー
* @var 文字列
* @アクセス公開
*/
var $default_controller;
/**
* コンストラクター
*
* ルートマッピング機能を実行します。
* config クラスと URI クラスをロードしてインスタンス化します $this->uri =&load_class('URI', 'core');
Log_message('debug', "ルーター クラスが初期化されました");
}
// ----------------------------------------------- --- --------------------------
/**
* ルートマッピングを設定します
*
* この関数は、URI リクエストに基づいて何を提供するかを決定します。
* ルーティング設定ファイルに設定されているすべての「ルート」も同様です。
* デフォルトのルーティング情報を設定します。コントローラー情報がない場合は、routes.phpの設定に従ってデフォルトのコントローラーが読み込まれます。
* // この機能が有効な場合、少し異なる方法でディレクトリ/クラス/メソッドを収集します
// 実際には、リクエストルートの形式で ask_string が許可されているにもかかわらず、Appppath/Config/Config.php で設定されていないためです
// 現時点では、引き続き「セグメント」フォームを使用します。
$segments = 配列();
if ($this->config->item('enable_query_strings') === TRUE AND isset($_GET[$this->config->item('controller_trigger')])) //ディレクトリ名、コントロール名、メソッド名によって渡される変数名を取得します。これら 3 つの項目は config/config.php で定義されます。
if (isset($_GET[$this->config->item('directory_trigger')]))
$segments[] = $this->fetch_directory();
} $this->set_class(trim($this->uri->_filter_uri($_GET[$this->config->item('controller_trigger')])));
$segments[] = $this->fetch_class();
}
if (isset($_GET[$this->config->item('function_trigger')]))
$segments[] = $this->fetch_method();
} // Routes.php ファイルをロードします。
// 現在の環境に応じて、APPPATH の下に Routes.php をロードします include(APPPATH.'config/'.ENVIRONMENT.'/routes.php');
} include(APPPATH.'config/routes.php');
} // 先ほどの構成情報に基づいてデフォルトのコントローラーを設定します。そうでない場合は FLASE になります。
$this->default_controller = ( ! isset($this->routes['default_controller']) OR $this->routes['default_controller'] == '') FALSE : strto lower($this->) ? ;ルート['デフォルト_コントローラー']);
「使用を使用して「s」を使用して「s」を使用して「s」を使用すると、それらを検証し、完了してから救済します
// ディレクトリ名、コントロール名、メソッド名のいずれかをクエリ文字列から取得できるかどうかを確認します。
$ this- & gt; _Validate_request ($ セグメント) を返します。
} // URI 文字列はありますか? ない場合は、「routes」ファイルで指定されたデフォルトのコントローラーが表示されます。
// uri_string が空の場合、ルートをデフォルトに設定します。 }*/
// URL サフィックスを削除する必要がありますか?
// URI サフィックスを削除します。CI では URI の後にサフィックスを追加できますが、実際にはルートを検索するのに冗長であり、影響があるため、最初に削除します。
$this->uri->_remove_url_suffix();
// Compile セグメントを配列にコンパイルします
// 正のセクションで URI を分割し、各セクションを同時にフィルターし、$ this- & gt; セグメントに預けます ;
$this->uri->_explode_segments();
// 存在する可能性のあるカスタム ルーティングを解析します
// ルーティングを処理し、ルーティングに従ってAPPPATH/config/routes.phpを設定します
$this->_parse_routes();
// 0 ではなく 1 で始まるようにセグメント配列のインデックスを再作成します
// URI セグメント インデックスを 1 から開始するように設定します
$this->uri->_reindex_segments();
} show_error("何を表示すべきかを決定できません。ルーティング ファイルにデフォルト ルートが指定されていません。");
} if (strpos($this->default_controller, '/') !== FALSE)
$this->set_class($x[0]);
$this->set_method($x[1]); $this->set_class($this->default_controller);
$this->set_method('index');
$this->_set_request(array($this->default_controller, 'index'));
} log_message('debug', "URI が存在しません。デフォルトのコントローラーが設定されています。");
} として URI セグメントの配列を取得、準備するアクションを受け取ります
* 入力し、現在のクラス/メソッドを設定します $segments = $this->_validate_request($segments);
、しかし、次の2つの文は、パラメーターが空のときにこの方法が他の場所で呼び出されないようにするためです。
// $segments が空の場合はルーティングを設定できないため、コールバック時に $segments は空になりません。
$ this-> を返す
} を使用して
$this->set_method($segments[1]);
}
その他
using to ’ ’ ’ sholder toholder ’sholder ’ アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト スルー t-is t i o s
のスプーフィング。
$segments[1] = 'インデックス';
} // 注: カスタム ルーティングがない場合、この配列は
になります。
// $this->uri-> セグメントと同一
// ルートのセグメント配列を更新します。ここにカスタム ルートがない場合、$this->uri->segments と同じになります
$this->uri->rsegments = $segments;
} へのパスの決定を試みます。
* コントローラー }
// 要求されたコントローラーはルート フォルダーに存在しますか?
// APPPATH/controllers/ フォルダーの下の php ファイルに $segments[0] が存在するかどうかを確認します
if (file_exists(APPPATH.'controllers/'.$segments[0].'.php'))
}
// コントローラーはサブフォルダーにありますか?
// $segments[0] は APPPATH/controllers の下のサブディレクトリですか s to ‐ out ‐ 一緒に to
// それが実際にディレクトリである場合、ルートのディレクトリ部分を決定できます。 ディレクトリを設定します // ディレクトリ部分を削除します。さらにルート検索。
$segments = array_slice($segments, 1);
I // URI リクエストにディレクトリ以外の段落がある場合は、指定されたコントローラへのリクエストになります。
if (count($segments) > 0)
if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].'.php'))
两 // エラーを報告するには 2 つの方法があり、1 つはデフォルトで、もう 1 つは自己決定です。
0 // 次の 404_Override は config/routes.php で定義されたルートです。
// その時点でのデフォルトの処理コントローラーが定義されている場合は、それを呼び出します。 があります
// 設定したばかりのルートのディレクトリ部分を削除します。これは、ルートが定義した 404 ルートになったためです。
️ // ここで、定義した 404 ルートは特定のディレクトリに配置することが許可されておらず、controllers/
の直下にのみ配置できることがわかります。
to
️
その他 ’’ ’’ ’’ ’Out' '' s 's' of way out out out out out out out out out out out of of of the of 's’ s ''?
show_404($this->fetch_directory().$segments[0]);
️
}
}
その他
I // URI リクエストにディレクトリしかない場合は、ここに来ます
は3にsをsを取得します - tl
判 // 以下の判定は$ this-& gt; 指定されたメソッドがあるかどうかを判定するだけです。 $x =explode('/', $this->default_controller);
$this->set_method($x[1]);
}
その他
{
$this->set_class($this->default_controller);
$this->set_method('index');
}
// デフォルトのコントローラーはサブフォルダーに存在しますか?
//APPPATH/controllers/目录/下面の有無を判断する方法
if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.'.php'))
{
$this->directory = '';
return array();
}
}
$segments を返します。
}
// ここまで遥かに到達した場合、URI は使用相关联を有効な
に関連付けていないことを意味します
// コントローラー クラス。 オーバーライドがあるかどうかを見てみましょう
// ここに来ました、説明されています、つまり、コントローラー/下位のコントローラーにも到達しません、また、このような目標にも到達しません。
if ( ! emptyempty($this->routes['404_override'])) に存在する可能性のあるルートと一致します。
* に対する config/routes.php ファイル、 への URI に対する
* クラス/メソッドを再マップする必要があるかどうかの決定、決定 Return $ this- & gt_request (explode ('/', $ this-& gt; ルート [$ uri]));
// ワイルドカードを RegEx に変換する 通常の変換にはワイルドカードを使用します
//
使用
if (preg_match('#^'.$key.'$#', $uri))
’s’ ’s out 1 out 1 out‐‐ 一緒に一緒に ‐ ‐
to uri to uri to uri to uri の uri to uri の uri の uri の uri の uri の uri の uri の uri の ss s ss s s ' 自体 ----uri 内の一致する文字を $val に置き換えます
$val = preg_replace('#^'.$key.'$#', $val, $uri);
}
// ここまで到達したということは、
これは、一致するルートに遭遇していないことを意味します。
// ----------------------------------------------- --- --------------------------
/**
* クラス名を設定します
*
* @access public
* @param string
* @return void
*/
関数 set_class($class)
{
$this->class = str_replace(array('/', '.'), '', $class);
}
// ----------------------------------------------- --- --------------------------
/**
* 現在のクラスを取得します
*
* @access public
* @return string
*/
関数 fetch_class()
{
}
// ワイルドカードを探してルート配列をループします
foreach ($this->$key => $val としてルート)
$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
‐ ‐ ‐ ‐ // RegEx は一致しますか? // 一致します。たとえば
// Routes.php には $route['show:any:num'] = 'anynum'; が含まれています。
// これら 2 つの設定を使用すると、showaa123 のような URI を、対応する値である anynum と照合できます // $ valに$があり、$ keyがある場合
// この if の機能がわかりません。 。 。専門家による救助を待っています if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE)
}
return $this->_set_request(explode('/', $val));
} に遭遇しなかったことを意味します
// ルートが一致したので、サイトのデフォルト ルートを設定します // そこで、ウェブサイトのデフォルトルートを設定します
$this->_set_request($this->uri->segments);
}
returned返品を使用します
}
// ----------------------------------------------- ---------------------
/**
* メソッド名を設定します
*
* @access public
* @param string
* @return void
*/
関数 set_method($method)
{
$this->method = $method;
}
// ----------------------------------------------- ---------------------
/**
* 現在のメソッドを取得します
*
* @access public
* @return string
*/
関数 fetch_method()
{
if ($this->method == $this->fetch_class())
{
'インデックス' を返します。
}
$this->メソッドを返す;
}
// ----------------------------------------------- ---------------------
/**
* ディレクトリ名を設定します
*
* @access public
* @param string
* @return void
*/
関数 set_directory($dir)
{
$this->directory = str_replace(array('/', '.'), '', $dir).'/';
}
// ----------------------------------------------- ---------------------
/**
* 要求されたコントローラー クラスを含むサブディレクトリ (存在する場合) を取得します
*
* @access public
* @return string
*/
関数 fetch_directory()
{
$this->ディレクトリを返します。
}
// ----------------------------------------------- ---------------------
/**
* コントローラーのオーバーライドを設定します
* コントローラーオーバーライド
* この関数はディレクトリ、コントローラー、メソッドを再度カバーできます。
* @アクセス公開
* @param配列
* @return null
*/
function _set_overrides($routing)
{
if ( ! is_array($routing))
{
戻る;
}
if (isset($routing['directory']))
{
$this->set_directory($routing['directory']);
}
if (isset($routing['controller']) AND $routing['controller'] != '')
{ www.2cto.com
$this->set_class($routing['controller']);
}
if (isset($routing['function']))
{ www.2cto.com
$routing['function'] = ($routing['function'] == '') ? 'インデックス' : $routing['関数'];
$this->set_method($routing['function']);
}
}
}
// ルータークラスの終了
/* Router.php ファイルの終わり */
/* 場所: ./system/core/Router.php */
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

ホットツール

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

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

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

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

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

ホットトピック
Gmailメールのログイン入り口はどこですか?
7328
9


Java チュートリアル
1626
14


CakePHP チュートリアル
1350
46


Laravel チュートリアル
1262
25


PHP チュートリアル
1209
29



PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
