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 を確認するだけです。
リーリーリーリー
リーリーのようなパラメータを追加します
エラーが見つかりました。それは、abc コントローラーが実際には存在しないことを意味します。
helloworld/index.php?r=site に変更すると、hello world が表示されます。これは一体何でしょうか。理由は非常に簡単で、サイトコントローラーが定義されているからです。
リーリー
リーリー
私はサイトという名前を使用するのはまったく好きではありません。テストが私のお気に入りなので、それを試すために別のテスト コントローラーを構築しました。
鋭い目を持つ人は、アクションの書き方を見たはずです。これは一体何ですか?やってみて初めて、実は別の表現方法だということが分かりました。
ブログの例で確認コードを表示するために使用したことを覚えています:
リーリー
このコントローラーのアクションは依然としてアクション + ID の形式で単純であるため、サードパーティのビジネスを一元的に宣言するアクションのコレクションとして理解しています。
一体何?あなたは、index.php?r=site/captcha の代わりに、index.php/site/captcha を使用したと言いました。
リーリー
path はパスの形式であり、get は ? の形式であることも理解しやすいです。
ルーティングとコントローラーの部分についてはさらに説明すべきことがたくさんありますが、このセクションではこれで終わりです。
以上、YII (3) のソースコード解析を内容も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。