目次
CIフレームワークのソースコード読書メモ8 Controller.php
ホームページ バックエンド開発 PHPチュートリアル CI フレームワークのソースコードを読むメモ 8 Controller.php_PHP チュートリアル

CI フレームワークのソースコードを読むメモ 8 Controller.php_PHP チュートリアル

Jul 13, 2016 am 10:13 AM
コントローラ フレーム ソースコード

CIフレームワークのソースコード読書メモ8 Controller.php

最近は時間が迫っており、ソースコードリーディングシリーズの更新が少し遅れています。コントローラーのコードは比較的少ないため、このブログではまずこのファイルのソース コード分析を更新します。
ルーティングと配布の後、実際のアプリケーション コントローラーはユーザーからのすべてのリクエストを引き継ぎ、ユーザー データと対話する責任を負います。 CI 内のすべてのアプリケーション コントローラーは CI_Controller のサブクラスである必要があります (CI のコアを拡張しない限り、コントローラーの親クラスは MY_Controller にすることができます)。
アプリケーションコントローラーでは、次のようなコードをよく使います:
/* 設定ファイルをロード */
$this->load->config("config_app");
/* モデルをロード */
$this->load->model("user");
/* ビューをロード */
$this->load->view("index");
/* 投稿を取得 */
$this->input->post("data",true);
/* ゲットゲット */
$this->input->get("data",true);
/* xss をクリア */
$this->security->xss_clean($data);
/* 時点をマーク */
$this->benchmark->mark("app_start");
次に、これらはどのように実装されるのでしょうか?
このクラスの構造は非常に単純ですが、CI_Controller のクラス図を掲載します。
1. _construct() コンストラクター
ここで、CI はプロセスを実行し、ロードされたすべてのコンポーネントを CI_Controller に追加します (is_loaded 関数がロードされたすべてのコンポーネントを追跡することは前に説明しました):
foreach (is_loaded() as $var => $class)
{
$this->$var =&load_class($class);
}
コントローラーがインスタンス化されるときに is_loaded によって追跡されるコンポーネントを確認します。
これは、$this->input やその他のメソッドを通じて CI コンポーネントを呼び出すことができる理由を説明しています。
これだけでは不十分です。ローダーも導入しましょう:
$this->load =&load_class('Loader', 'core');
$this->load->initialize();
これで、Loader コンポーネントを使用して、設定をロード ($this->load->config)、モデルをロード ($this->load->model)、ビューをロード ($this->load- >見る)
CI_Controller は、複数のコンポーネントを保持するスーパークラスであると言えます。このように、設計パターンにおける「エージェント パターン」によく似ています。
2.&get_instance
簡単に説明すると、CI_Controller はシングルトンモードのクラスであり、このクラスのインスタンスは get_instance() メソッドを通じて取得されます。このメソッドは、CodeIgniter.php の get_instance 関数によって呼び出されます。
パブリック静的関数 &get_instance()
{
self::$instance を返す;
}
以下はコントローラーに関するヒントです:
1. CI のコントローラーでディレクトリをカスタマイズできます。たとえば、application/controller ディレクトリにディレクトリ admin を作成し、コントローラーの URL アクセス パスは次のようになります。
test.xq.com/admin/index/
2. コントローラーは過度のロジックを持たないようにして、ビジネス ロジックをモデルにカプセル化する必要があります。
3. コントローラーはビジネスに応じて区別する必要があります。たとえば、UserController はユーザー関連のリクエストを処理し、AppController はアプリケーションのリクエストを処理します。これは原則ではなく、単なる方法です。
4. コントローラーのクラス名は大文字で始まり、ファイル名はすべて小文字である必要があります。
5. コントローラー内のアンダースコアで始まるメソッドは CI によってプライベートメソッドとみなされ、外部から直接アクセスすることはできません。
上記がControllerの全内容です。
最後に、CI_Controllerのソースコードを掲載します:
クラス CI_Controller {
プライベート静的 $instance;
/**
* コンストラクター
     */
パブリック関数__construct()
{
foreach (is_loaded() as $var => $class)
{
$this->$var =&load_class($class);
}
$this->load =&load_class('Loader', 'core');
$this->load->initialize();
Log_message('debug', "コントローラ クラスが初期化されました");
}
パブリック静的関数&get_instance()
{
return self::$instance;
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/914774.html技術記事 CIフレームワークのソースコード読解メモ 8 Controller.php 最近時間が迫っており、ソースコード読解シリーズの更新が少し遅れています。コントローラーのコードが比較的小さいため、このブログでは最初にファイルのソースを更新します...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

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

Java フレームワークの商用サポートの費用対効果を評価する方法

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

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

Golang フレームワークのドキュメントのベスト プラクティス Golang フレームワークのドキュメントのベスト プラクティス Jun 04, 2024 pm 05:00 PM

Golang フレームワークのドキュメントのベスト プラクティス

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

さまざまなアプリケーションシナリオに最適な Golang フレームワークを選択する方法

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

PHP フレームワークの学習曲線は他の言語フレームワークと比較してどうですか?

Java フレームワークのパフォーマンス比較 Java フレームワークのパフォーマンス比較 Jun 04, 2024 pm 03:56 PM

Java フレームワークのパフォーマンス比較

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

golang フレームワーク開発の実践的な詳細な説明: 質疑応答

Golang フレームワークのパフォーマンス比較: 賢明な選択を行うための指標 Golang フレームワークのパフォーマンス比較: 賢明な選択を行うための指標 Jun 05, 2024 pm 10:02 PM

Golang フレームワークのパフォーマンス比較: 賢明な選択を行うための指標

See all articles