⊗ppMVDFmCn 28 of 35 menu

PHPにおける独自MVCフレームワークのコントローラ

ご存知の通り、私たちのフレームワークのすべてのコントローラは、 データをビューに送信するために呼び出す必要があるメソッド renderを持っています。 このメソッドは、私たちのユーザー定義コントローラが、 コアにある親クラスControllerから継承します。 このクラスを作成しましょう:

<?php namespace Core; class Controller { protected function render($view, $data) { } } ?>

ご覧の通り、メソッドrenderはパラメータとして ビュー名と表示用データを受け取ります。 このメソッドに、コントローラアクションのデータ表示に関する情報を含む 特別なクラスPageのオブジェクトを返させましょう。 このクラスには、ビュー名、データ、ページタイトル、 およびサイトレイアウトのファイル名が含まれます:

<?php namespace Core; class Page { private $layout; private $title; private $view; private $data; public function __construct($layout, $title, $view, $data) { $this->layout = $layout; $this->title = $title; $this->view = $view; $this->data = $data; } public function __get($property) { return $this->$property; } } ?>

そうすると、私たちのメソッドrenderのコードは 次のようになります:

<?php namespace Core; class Controller { protected $layout = 'default'; protected function render($view, $data) { return new Page($this->layout, $this->title, $view, $data); } } ?>

ここで何が起こっているか説明しましょう。 ビュー名とデータはメソッドのパラメータとして渡されます。 しかし、ユーザーコントローラでは、 プロパティtitleに値を設定することでページタイトルも指定されます。 つまり、$this->titleには、 クラスPageのコンストラクタに渡すタイトルが含まれます。

レイアウトについても考慮点があります。 ご存知の通り、私たちのフレームワークはファイル default.phpからのレイアウトを使用します。 実際には、各アクションは別のレイアウトを持つこともできます。 そのためには、アクション自体でプロパティlayoutに 別のレイアウト名を設定する必要があります。

これを実現する方法:私たちの親コントローラはプロパティlayoutを持ち、 デフォルト値は'default.php'です。 これがデフォルトのレイアウトになります。 しかし、ユーザーコントローラのアクションがプロパティlayoutの値を オーバーライドすると、レイアウトも別のものになります。

私のクラスControllerのコードをコピーし、 ファイル/core/Controller.phpに配置してください。

私のクラスPageのコードをコピーし、 ファイル/core/Page.phpに配置してください。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否