ホームページ バックエンド開発 PHPチュートリアル Cakephpの実行処理コードの解釈

Cakephpの実行処理コードの解釈

Dec 20, 2016 am 09:40 AM

最近、仕事で Cakephp という PHP フレームワークを使用する必要があり、以前はあまり使用していなかったので、最近いくつかのマニュアルを読んだのですが、Cakephp のいくつかの点があまり明確ではないように感じたので、見てみることにしました。そのソースコードは次のとおりです。プロセス中にいくつかのメモがあります

このドキュメントに興味がある場合は、対応する PHP ファイルを開いて比較するのが最善だと思います。そうしないと、私が何を言っているのかわからないかもしれません。 。

開始:

デフォルトでインターネットからダウンロードしてインストールすると、app、cake、vendors、.htaccess、index.php ファイルの 3 つのディレクトリが作成されます。

マニュアルの説明と経験によれば、cake ディレクトリはフレームワークのコア コードであり、開発中に触れる必要のないディレクトリでもあります。これは、将来フレームワーク コアをアップグレードするのに役立ちます。開発プロセス中に独自のクラスを作成する必要がある場合は、ファイルをベンダー ディレクトリに配置し、app::import などのメソッドを使用して呼び出すことができます。 .htaccess とindex.php は、実行のためにデフォルトのアクセス要求を app/webroot/index.php ファイルに渡します (サーバーが .htaccess をサポートしていない場合は、index.php ファイルを再度変更する必要があります)。アプリがデフォルトのメイン戦場であることを決定します (もちろん、これは変更できます。たとえば、複数のアプリケーションがコアを共有する場合、ここでは詳しく説明しません)

app/webroot/index.php ファイルを開くとき、このファイルは次のように記述されていることがわかります。コードの最初の部分は、いくつかの基本的なパス定数 (アプリのパス、ディレクトリのパスなど) を定義し、その後にcake/bootstrap.php ファイルが続きます。必要な情報をすべてロードし、フレームワークを初期化します。何が行われるかを見てみましょう。 B は、bootstrap.php ファイルのコードの一部です。

If (! Isset ($ BOOTSTRAP)) {

'Cake' Ds.フレームワークの共通関数メソッド

'Object.php'; // すべてのクラスの親クラス

'Inflector'; .php'; // 単一複数こぶの名前付けを処理するカテゴリの名前付け: 例:
、、、 ,,, ,, ,,,' '; //キャッシュエンジンクラス

をロードする‐ ‐ ‐ ‐‐‐‐‐‐‐‐'; 'コア', array('ディスパッチャ') / /Import パス処理クラス、プログラム エントリ パスなど。

app/webroot/index.php ファイルの最後で、$Dispatcher->dispatch メソッドが呼び出され、プログラムが実行されます
$Dispatcher = new Dispatcher( ); //パス処理クラスを初期化します
$Dispatcher->dispatch($url); //フレームワークが URL 実行プログラムを決定し始めます

フレームワークがどのように Dispatcher をロードしてプログラムを実行するかを見てみましょう。

まず、cake/dispatcher.php ファイルの 106 行目でディスパッチ メソッドを見つけます。デフォルトでは、ディスパッチに渡すパラメータは空になります。url パラメータが空の場合、フレームワークは自動的に getUrl を呼び出します。 URL とその他の情報を取得するメソッド

次のようなコード:

$url = $this->getUrl(); //URL パスを取得します
$this->params = array_merge($this->parseParams($url), $AdditionalParams); $_POST および $_GET によって渡される値を含む配列、およびコントローラーとメソッド。プログラムは parseParams メソッドを通じて URL パラメーターを処理し、routes クラス メソッドを呼び出してコントローラーとアクションの情報を取得し、それを通常の配列に組み立てます。それを $this->params に渡すと、次のコードでは、$this->params が $controller->params に割り当てられることに注意してください。これが、$this->params を使用できる理由です。例: $this->params['controller'] は現在のリクエストのコントローラー名を取得します
次に、現在のアクションが、アクションの前にアンダースコア (_) があるかどうかで判断されます。次に、いくつかのパラメータが現在のコントローラに割り当てられます。 $controller->base = $this->base ;
$controller->ここ = $this->ここ;
$controller ->webroot = $this->webroot;
$controller->plugin = $this->plugin;
$controller- >params =& $this->params; //コントローラーとアクション名、フォームデータ、URL などを含むすべてのパラメーターを $controller->プラグインに渡します
$controller->action =& $this- >params['action'];
$controller->passedArgs = array_merge($ this->params['pass'], $this->params['named']); //渡されたすべてのパラメータを割り当てます/controller /action/a:1/b=2/3/4 などの名前付きパラメーターがあるかどうかを含む、$_GET による $controller->passedArgs

(注: コントローラーが render メソッドを実行すると、いくつかの変数をビューに自動的に渡します。これをテンプレートと呼びます。たとえば、コントローラーはビューに passArgs 変数の値を割り当てます。これにより、$this->passedArgs を直接呼び出すことができます。
ここで注意すべき点は、現在の操作に $_POST、$_GET、その他の値があるかどうかをフレームワークが判断することです。たとえば、$_POST には、データ フィールドのフィールド名があります。 $controller->data =& $this->params['data'];を実行します
最後に変更されたメソッドは、現在のコントローラーを呼び出し、実行用のパラメータを渡します


コードは次のとおりです: return $this - >_invoke($controller, $this->params); //アドレス参照を通じて $controller にパラメータを渡し、$controller を呼び出し、正式に実行します

呼び出された _invoke

関数を見てみましょう _invoke(&$ controller, $params)

function _invoke(&$controller, $params) {

$controller->constructClasses(); //必要なコントローラー情報をロードし、appController などをマージします (モデル、ヘルパー、コンポーネントのロードを含む)、詳細は、controller.php のクラスメソッドを確認してください
$controller->Component->initialize($controller); // コントローラーの前にコンポーネントの初期化メソッドを呼び出します beforeFilter

$controller->beforeFilter();

$controller - >Component->startup($controller);

ここでは、$controller->Component->initialize が $controller->beforeFilter() の前に実行されることがわかりますが、このマニュアルでは説明しません。ここで注意すべき点は、$controller->constructClasses メソッドが、現在のユーザー定義コントローラー クラスと、$users などの AppController (app_controller.php) 内のいくつかの変数をマージすることです。ヘルパーやコンポーネントなど、ここでより重要なことは、$users 変数のすべての値を循環して、対応するモデルをロードするということです。$this->uses 変数が false の場合、モデルはロードされません。初期化済み: コントローラーを定義するだけで、対応するモデル ファイルを定義したくない場合は、この変数を空にする必要があることに注意してください。コントローラーが呼び出されたときに他のモデルを自動的にロードしたい場合は、目的のモデルを割り当てることができます。 name を $this->users=array('modelname1', 'modelname2') などに変更します。別の状況として、ユーザーが $users の値を自分で設定しない場合、フレームワークは自動的に対応するモデル ベースの呼び出しを試みます。名前について (モデルファイルは必要ありませんが、この時点ではデータベースに対応するテーブルが存在する必要があります。そうでない場合はエラーが報告されます)

その他の説明は不要です


以下
$output = $controller ->dispatchMethod($params['action'], $params['pass ']);

このメソッドはオブジェクトクラスのdispatchMethodメソッドを呼び出すもので、実際にはコントローラークラスが対応するアクションメソッドを実行します


。以下は小さなコードです

if ($controller->autoRender) {
output = $output; 時間になると、フレームワークは対応するテンプレートを呼び出して最終的な HTML を表示および出力します


フレームワークの実行手順もちろん、まだ書ききれていないことがたくさんあります。第一に、私の文章力には限界があります。第二に、関数が多すぎるため、ここでは一つずつ説明しません

これは単純化した実行プロセスであり、モデルやその他の内容は含まれません。ソースコードを読むのが面倒に感じることもあるので、参考にしてください。マニュアルを読むよりも理解しやすいです

上記は次のとおりです。 Cakephp の実行処理コードの解釈の内容 さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

CakePHP でデータベース クエリ ビルダーを使用するにはどうすればよいですか? CakePHP でデータベース クエリ ビルダーを使用するにはどうすればよいですか? Jun 04, 2023 am 09:02 AM

CakePHP は、Web アプリケーション開発で広く使用されているオープンソースの PHPMVC フレームワークです。 CakePHP には、インタラクティブなパフォーマンス データベース用の強力なデータベース クエリ ビルダーなど、多くの機能とツールがあります。このクエリ ビルダーを使用すると、面倒な SQL ステートメントを作成することなく、オブジェクト指向構文を使用して SQL クエリを実行できます。この記事では、CakePHP でデータベース クエリ ビルダーを使用する方法を紹介します。データベース接続の確立 データベース クエリ ビルダーを使用する前に、まず Ca でデータベース接続を作成する必要があります。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP でカスタム ページネーションを作成するにはどうすればよいですか? CakePHP でカスタム ページネーションを作成するにはどうすればよいですか? Jun 04, 2023 am 08:32 AM

CakePHP は、開発者に多くの便利なツールと機能を提供する強力な PHP フレームワークです。その 1 つはページネーションです。これは、大量のデータを複数のページに分割し、閲覧と操作を容易にするのに役立ちます。デフォルトでは、CakePHP はいくつかの基本的なページネーション メソッドを提供しますが、場合によってはカスタムのページネーション メソッドを作成する必要がある場合があります。この記事では、CakePHP でカスタム ページネーションを作成する方法を説明します。ステップ 1: カスタム ページネーション クラスを作成する まず、カスタム ページネーション クラスを作成する必要があります。これ

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

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

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

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

See all articles