レイアウトの作成 (5/6)
作成:2015-11-28 08:47
更新:2015-11-28 08:47
更新:2015-11-28 08:47
■レイアウトテンプレートを使う
では、作成したオリジナルのレイアウトテンプレートを使ってみましょう。今回は、サンプルとしてHeloアプリケーションのindexアクションとして処理を用意してみます。
下のリスト欄に、HeloController.phpのソースコードを掲載しておきます。ここでは、初期化のinitializeメソッドと、indexアクションの処理を用意してあります。
・initializeメソッド
初期化のためのinitializeメソッドでは、 parent::initialize(); でスーパークラスに処理を送った後、レイアウトテンプレートの設定をしています。
$this->viewBuilder()は、ビューを作成するためのViewBuilderというクラスのインスタンスを取得するためのものです。この中の「layout」というメソッドが、使用するレイアウトテンプレートを設定するためのメソッドになります。
layout('sample'); と実行することで、CakePHP3は、「Layout」内にあるsample.ctpをレイアウトテンプレートとして読み込み、ページを生成するようになります。initializeメソッドでこれを行うようにすることで、このHeloControllerクラスに用意されるすべてのアクションでレイアウトが使われるようになります。
また、ヘッダーとフッター用の変数も用意しています。以下のものですね。
これらは、アクションメソッド側で再設定すれば、そちらが利用されますので、とりあえずinitializeでデフォルトの値を設定しておき、後は必要に応じてアクションメソッドで変更すればよいでしょう。
・indexメソッド
indexアクションでは、特に難しいことはしていません。$msgという変数を用意し、これをmessagesに設定しているだけです。
後は、テンプレート側でこれを表示するようにコードを用意すればいい、というわけです。
下のリスト欄に、HeloController.phpのソースコードを掲載しておきます。ここでは、初期化のinitializeメソッドと、indexアクションの処理を用意してあります。
・initializeメソッド
初期化のためのinitializeメソッドでは、 parent::initialize(); でスーパークラスに処理を送った後、レイアウトテンプレートの設定をしています。
$this->viewBuilder()->layout('sample');
$this->viewBuilder()は、ビューを作成するためのViewBuilderというクラスのインスタンスを取得するためのものです。この中の「layout」というメソッドが、使用するレイアウトテンプレートを設定するためのメソッドになります。
layout('sample'); と実行することで、CakePHP3は、「Layout」内にあるsample.ctpをレイアウトテンプレートとして読み込み、ページを生成するようになります。initializeメソッドでこれを行うようにすることで、このHeloControllerクラスに用意されるすべてのアクションでレイアウトが使われるようになります。
また、ヘッダーとフッター用の変数も用意しています。以下のものですね。
$this->set('header', '* this is sample site *');
$this->set('footer', 'copyright 2015 libro.');
これらは、アクションメソッド側で再設定すれば、そちらが利用されますので、とりあえずinitializeでデフォルトの値を設定しておき、後は必要に応じてアクションメソッドで変更すればよいでしょう。
・indexメソッド
indexアクションでは、特に難しいことはしていません。$msgという変数を用意し、これをmessagesに設定しているだけです。
$msg = "これは、サンプルアクションです。";
$this->set('message', $msg);
後は、テンプレート側でこれを表示するようにコードを用意すればいい、というわけです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<?php namespace App\Controller; use App\Controller\AppController; class HeloController extends AppController { public function initialize() { parent::initialize(); $this->viewBuilder()->layout('sample'); $this->set('header', '* this is sample site *'); $this->set('footer', 'copyright 2015 libro.'); } public function index() { $msg = "これは、サンプルアクションです。"; $this->set('message', $msg); } }
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る