ホームページ  >  記事  >  バックエンド開発  >  YIIのソースコード解析(3)

YIIのソースコード解析(3)

WBOY
WBOYオリジナル
2016-08-08 09:32:18886ブラウズ

Yii プログラムを開始するプロセスとページをレンダリングする方法についてはすでに見てきました。私たちが今日分析したいのは、Yii がユーザーのリクエストをどのように処理するかということです。それがコントロールとアクションの部分です。

このプロセスを説明するために helloworld を例に挙げてみましょう。アドレスバーに http://localhost/study/yii/demos/helloworld/index.php と入力すると、ページに hello world が表示されます。

前の分析ではデフォルト値を使用しましたが、URL にパラメータがある場合、Yii はそれをどのように処理しますか?この質問を念頭に置いて、詳しく分析してみましょう。

CWebApplication には次のコード行があります:

リーリー

これは伝説のルートです、ちょっとゼリーじゃないですか?まずは getUrlManager がどれほど素晴らしいかを見てみましょう。

リーリー

これには再び関係を見つける必要があります。

リーリー

return $this->_components[$id]; を実行します。ID は渡された urlManager です。実際、ここからは urlManager クラスを直接見つけて parseUrl を確認するだけです。

リーリー
上記のコードから判断すると、URL に何かをアップロードしない場合は、「」を返すだけで済みます。そこで、パラメータをどのように渡すかという疑問が生じます。

リーリー

リーリー
解決策はあります。一緒に害を与えましょう。 helloworld/index.php?r=abc

のようなパラメータを追加します

エラーが見つかりました。それは、abc コントローラーが実際には存在しないことを意味します。

helloworld/index.php?r=site に変更すると、hello world が表示されます。これは一体何でしょうか。理由は非常に簡単で、サイトコントローラーが定義されているからです。

リーリー
わかりました、これに異論はありませんが、actionIndex とは一体何ですか? Yii では、これをアクションと呼びます。 ?r=site/index と入力すると、アクションが「/」で区切られ、コントローラーの背後にあるパラメーターがキャプチャされます。表示するアクションをデバイスに追加します:

リーリー
?r=site/view にアクセスすると、「Hello View」という出力が表示されましたか?それは間違いなく真実です。私はあまり本を読んでいませんが、写真と真実があります。

私はサイトという名前を使用するのはまったく好きではありません。テストが私のお気に入りなので、それを試すために別のテスト コントローラーを構築しました。

鋭い目を持つ人は、アクションの書き方を見たはずです。これは一体何ですか?やってみて初めて、実は別の表現方法だということが分かりました。

ブログの例で確認コードを表示するために使用したことを覚えています:

リーリー

このコントローラーのアクションは依然としてアクション + ID の形式で単純であるため、サードパーティのビジネスを一元的に宣言するアクションのコレクションとして理解しています。

一体何?あなたは、index.php?r=site/captcha の代わりに、index.php/site/captcha を使用したと言いました。

リーリー

urlFormat には path と get の 2 種類があります。main.php で指定されていない場合は、index.php?r=site/captcha の get メソッドになります。指定するとindex.php/site/captchaのような感じになります

path はパスの形式であり、get は ? の形式であることも理解しやすいです。

ルーティングとコントローラーの部分についてはさらに説明すべきことがたくさんありますが、このセクションではこれで終わりです。

以上、YII (3) のソースコード解析を内容も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。