// ----------------------------------------------- --- --------------------------
// Router::_set_routing() 関数の設定ファイルからデフォルトのコントローラー名を読み取ります。そうでない場合は FALSE になります
// ----------------------------------------------- --- --------------------------
// この関数は _set_default_controller によって呼び出されます。行 216 ~ 230 を見ると、この $segments が空ではないことがわかります
、しかし、次の2つの文は、パラメーターが空のときにこの方法が他の場所で呼び出されないようにするためです。
// $segments が空の場合はルーティングを設定できないため、コールバック時に $segments は空になりません。
if (count($segments) == 0)
$ this-> を返す
}
// ディレクトリ名でもあるクラス名を設定します
$this->set_class($segments[0]);
// メソッド名が存在する場合はそれを設定し、存在しない場合はインデックスに設定します
if (isset($segments[1]))
を使用して
$this->set_method($segments[1]);
}
その他
through の through through through ’ through ’ through ’ s ’ through ‐ to ‐ ‐ ‐ r‐ and ‐
using to ’ ’ ’ sholder toholder ’sholder ’ アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト スルー t-is t i o s
のスプーフィング。
$segments[1] = 'インデックス';
}
// セグメントを含むように「ルーティングされた」セグメント配列を更新します。
// 注: カスタム ルーティングがない場合、この配列は
になります。
// $this->uri-> セグメントと同一
// ルートのセグメント配列を更新します。ここにカスタム ルートがない場合、$this->uri->segments と同じになります
$this->uri->rsegments = $segments;
}
// ----------------------------------------------- --- --------------------------
/**
* Validates は、
へのパスの決定を試みます。
* コントローラー
* 提供されたセグメントを検証し、コントローラーへのパスを決定しようとします
*@アクセス非公開
* @param配列
* @return 配列
*/
関数_validate_request($segments)
{
// ? ? ? ? ? ? ? ? ? ? ? ? ? ?
if (count($segments) == 0)
$segments を返します。
}
// 要求されたコントローラーはルート フォルダーに存在しますか?
// APPPATH/controllers/ フォルダーの下の php ファイルに $segments[0] が存在するかどうかを確認します
if (file_exists(APPPATH.'controllers/'.$segments[0].'.php'))
$segments を返します。
}
// コントローラーはサブフォルダーにありますか?
// $segments[0] は APPPATH/controllers の下のサブディレクトリですか
if (is_dir(APPPATH.'controllers/'.$segments[0]))
s to ‐ out ‐ 一緒に to
// それが実際にディレクトリである場合、ルートのディレクトリ部分を決定できます。 ディレクトリを設定します
$this->set_directory($segments[0]);
// ディレクトリ部分を削除します。さらにルート検索。
$segments = array_slice($segments, 1);
I // URI リクエストにディレクトリ以外の段落がある場合は、指定されたコントローラへのリクエストになります。
if (count($segments) > 0)
” ”
求 // $ セグメント [0] を決定します。
if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].'.php'))
两 // エラーを報告するには 2 つの方法があり、1 つはデフォルトで、もう 1 つは自己決定です。
0 // 次の 404_Override は config/routes.php で定義されたルートです。
// その時点でのデフォルトの処理コントローラーが定義されている場合は、それを呼び出します。
if ( ! emptyempty($this->routes['404_override']))
️
があります
// 設定したばかりのルートのディレクトリ部分を削除します。これは、ルートが定義した 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; 指定されたメソッドがあるかどうかを判定するだけです。
if (strpos($this->default_controller, '/') !== FALSE)
$x =explode('/', $this->default_controller);
$this->set_class($x[0]);
$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']))
{
$x =explode('/', $this->routes['404_override']);
$this->set_class($x[0]);
$this->set_method(isset($x[1]) ? $x[1] : 'index');
$x を返します。
}
// この時点では、404 を表示する以外に何もすることはありません
// 展示一个404页面
show_404($segments[0]);
}
// ----------------------------------------------- ---------------------
/**
* ルートを解析する
* ルートを解析する
* この関数は、
に存在する可能性のあるルートと一致します。
* に対する config/routes.php ファイル、
への URI に対する
* クラス/メソッドを再マップする必要があるかどうかの決定、決定
*
*@アクセス非公開
* @return void
*/
function _parse_routes()
{
// セグメント配列を URI 文字列に変換します
// 将セグメント数组转はウリ文字符列の形式
$uri = implode('/', $this->uri->segments);
// リテラルの文字的、字面の一致はありますか? そうであれば完了です
// このuriがroutes.phpで定義されている場合。。。。。
if (isset($this->routes[$uri]))
{
Return $ this- & gt_request (explode ('/', $ this-& gt; ルート [$ uri]));
}
// ワイルドカードを探してルート配列をループします
foreach ($this->$key => $val としてルート)
// ワイルドカードを RegEx に変換する 通常の変換にはワイルドカードを使用します
//
$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
‐ ‐ ‐ ‐ // RegEx は一致しますか?
使用
// 一致します。たとえば
// Routes.php には $route['show:any:num'] = 'anynum'; が含まれています。
// これら 2 つの設定を使用すると、showaa123 のような URI を、対応する値である anynum と照合できます
if (preg_match('#^'.$key.'$#', $uri))
// $ valに$があり、$ keyがある場合
// この if の機能がわかりません。 。 。専門家による救助を待っています
’s’ ’s out 1 out 1 out‐‐ 一緒に一緒に ‐ ‐
if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE)
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);
}
return $this->_set_request(explode('/', $val));
}
}
// ここまで到達したということは、
に遭遇しなかったことを意味します
// ルートが一致したので、サイトのデフォルト ルートを設定します
これは、一致するルートに遭遇していないことを意味します。
// そこで、ウェブサイトのデフォルトルートを設定します
$this->_set_request($this->uri->segments);
}
// ----------------------------------------------- --- --------------------------
/**
* クラス名を設定します
*
* @access public
* @param string
* @return void
*/
関数 set_class($class)
{
$this->class = str_replace(array('/', '.'), '', $class);
}
// ----------------------------------------------- --- --------------------------
/**
* 現在のクラスを取得します
*
* @access public
* @return string
*/
関数 fetch_class()
{
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 */
http://www.bkjia.com/PHPjc/477681.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477681.html技術記事 [php] ?php if ( !定義(BASEPATH)) exit(スクリプトへの直接アクセスは許可されません); /** * CodeIgniter * * PHP 5.1.6 以降用のオープンソース アプリケーション開発フレームワーク * * @packag...