ホームページ >バックエンド開発 >PHPチュートリアル >yii ソースコード分析 3、yii ソースコード分析_PHP チュートリアル

yii ソースコード分析 3、yii ソースコード分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:14:25716ブラウズ

yii ソース コード分析 3、yii ソース コード分析

次のように指定してください: TheViper http://www.cnblogs.com/TheViper/

前回の記事ではCWebApplicationの¥route=$this->getUrlManager()->parseUrl($this->getRequest());と$route=controler/actionidの取得についてお話しました。

この記事では $this->runController ($route); について説明します

リーリー

$ca = $this->createController ($route)); createController の機能は、$route 内のコントローラーとアクションを分離し、コントローラー インスタンスを作成することです。

最後にコントローラーインスタンスとアクションIDを返します。

次に、CWebApplication の runController($route)、$controller->init(); に戻り、コントローラーの初期化時にこれを実行します。これは次のようにサブクラスで書き換える必要があります。 リーリー

このように、$this->db を使用して、VideoController の db コンポーネントを呼び出すことができます。

$controller->run ( $actionID ); Ccontroller に転送します。

リーリー

$this->createAction ( $actionID ); アクション インスタンスを作成します。

次に、 runActionWithFilters($action, $filters); filter() がない場合は、直接 runAction($action) します。

$action->runWithParams ( $this->getActionParams () ).$action は CInlineAction インスタンスです。

リーリー

Cアクション

リーリー

これら 2 つのクラスは非常に単純で、コントローラー クラスのアクション メソッドを実行するだけです。

filter() がある場合は、上記の runActionWithFilters($action, $filters) に戻り、CFilterChain::create ( $this, $action, $filters )->run ();

明らかに、フィルターがある場合は、アクション メソッドを実行する前にフィルター リストを設定する必要があります。

CFilterChain は、「application.filters.LoginFilter+upload_video」のような構成をフィルター チェーンに解析します。

フィルター チェーン内の各項目は、CInlineFilter または CFilter インスタンスです。

リーリー

'application.filters.LoginFilter+upload_video' この構成により、CFilter インスタンスが作成されます。

リーリー

次に、上記の CFilterChain::create ($this, $action, $filters)->run (); に run() があり、リクエストによって解析されたアクションが Upload_video の場合、yii は LoginFilter インスタンスを取り出します。

ログインフィルターなど

リーリー

内部にはプレフィックスとポストフィックスがあり、フィルターを有効にする必要があるアクション メソッドに対して、アクション メソッドの実行前と後に、それぞれ自己定義の preFilter メソッドと postFilter メソッドを実行することを意味します。

次に $filterChain->run (); ここで間違いを犯しやすいです。

実際、CFilterChain で run() を再度使用したところ、内部に $this->filterIndex++ があることに気付きました。これは再帰に少し似ています。

フィルターがアクションをフィルターしたい場合は、次のように CFilter に移動し、$filterChain->run (); return CFilterChain、$this->filterIndex++ を実行し、$filterChain->run (); を続けます。 。 。 。 。 。

私の「application.filters.LoginFilter+upload_video」では、upload_video アクションのみがフィルタリングされるため、CFilterChain が返されると、$this->filterIndex は 1 になり、フィルタ リストにはフィルタ インスタンスが 1 つだけ含まれるため、今回は$this->controller->runAction ( $this->action ); に進みます。これは、フィルターが設定されていない場合の $this->runAction ( $action ); と同じです。

フィルターの解析後はデータ操作などがあり、最後にレンダリングビューのrender()です。これは単純すぎます。extract($data) を実行して、ビュー ファイルをインクルードします。

別のコントローラー/アクションにジャンプする forward() メソッドもあります。本質は、CWebApplication の runController に戻り、上記の分析プロセスを繰り返すことです。

最後にトリミングされた yii http://files.cnblogs.com/TheViper/framework.zip を添付します

http://www.bkjia.com/PHPjc/909747.html

tru​​ehttp://www.bkjia.com/PHPjc/909747.html技術記事 yii ソース コード分析 3、yii ソース コード分析の再版を示してください: TheViperhttp://www.cnblogs.com/TheViper/ 前回の記事では、¥route=$this-getUrlManager ()-parseUrl ($this-ge. ..) と記載されています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。