FuelPHPをやってみる (9) - Controller_Templateを使ってみる -
着々とドキュメント読みつつ進めてみる。Controller_Templateを使えばビューレイアウトな方式でレスポンスを出せる模様
fuel/app/classes/controller/home.php
<?php
class Controller_Home extends Controller_Template {
public $template = "layout";
public function get_index() {
$data["message"] = "hoge fuga foobar";
$this->template->title = "test";
$this->template->content = View::forge("home/index", $data);
}
}
$templateでレイアウトに使うビューを指定出来る。デフォルトはtemplateな模様、でfuel/app/views/$template.phpを作成する。まぁちょっとだけController_Templateのソース解読をするので今はとりあえず省略
fuel/app/views/layout.php
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
fuel/app/views/home/index.php
<h2><?php echo $message; ?></h2>
結果として
<html>
<head>
<title>test</title>
</head>
<body>
<h2>hoge fuga foobar</h2>
</body>
</html>
てな感じでレンダリングされる模様
fuel/core/classes/controller/template.phpを読む
<?php
namespace Fuel\Core;
abstract class Controller_Template extends Controller {
public $template = "template";
public function before() {
if (!empty($this->template) and is_string($this->template)) {
$this->template = View::forge($this->template);
}
return parent::before();
}
public function after($response) {
if (empty($response)) {
$response = $this->template;
}
return parent::after($response);
}
}
っていう感じになってる。まだ完全にFuelPHPの処理フローを理解している訳じゃないけど、実際のアクション側から値を返すとその値に基準したレスポンスが返される。
であとbefore/afterで処理しているので自前のコントローラーでbefore/afterする際にはスーパークラスとなるController_Templateのbefore/afterも呼び出す。やらないとController_Template->templateが初期化されないので、そもそもエラーになると思う