LoginSignup
17
16

More than 5 years have passed since last update.

FuelPHP開発入門_05

Last updated at Posted at 2014-04-14

第三回でまとめてconfigファイルを書きましたが、
あとからormパッケージを入れるかもしれません。
リアルタイムで書いてるとこういうことが起こる(´@ω@`)

Controller_Templateの実装に入っていきます。
前回までのおさらいはこちら
- FuelPHP開発入門_01
- FuelPHP開発入門_02
- FuelPHP開発入門_03
- FuelPHP開発入門_04

Controller_Templateとは

第四回でも書いたとおり、ビューテンプレートを利用することのできるコントローラークラスです。
HTMLの<head>部分や<body>内の<header><footer>などを複数作成せず、
その内側のcontent部分だけを動的に差し替えて表示することができます。

実装

実際の書き方の基本はこう。

view/layouts/template.php
<html>
    <head>
        <title><?php echo $title ?></title>
    </head>
    <body>
        <?php echo $content ?>
    </body>
</html>

$titleと$contentが動的に変更される部分です。
コントローラー側からは

welcome.php
public function action_index()
{
    $this->template->title="ようこそ";
    $this->template->content = View::forge('welcome/index');
}

のように記述します。

例えば「メール送信画面からメール送信後、特に動作はないが送信完了画面を出したい」という
ことを実装しようとした場合は以下

mail.php
    if(メール送信完了){
        $this->template->title="送信完了";
        $this->template->content = View::forge('mail/complate');
        return;
    }
    $this->template->title="ようこそ";
    $this->template->content = View::forge('mail/delivery');

ビューだけ切り替えてやればリダイレクト等書かなくて済みますし、
例えば送信先アドレスや送信内容の表示も引数の受け渡しなしで行えます。

レイアウトの読み込み

デフォルトではtemplate.phpの名前で書くテンプレートですが、
別名で作ることもできます。例えばuser.phpとadmin.phpとか。
その場合はviews/layoutsの下にファイルを設置し、コントローラー側で

user.php
class Controller_User extends Controller_Template
{
    public $template = 'layouts/user';
...
}

この形で指定してあげれば表示されます。

注意点

CakePHPではできることですが、FuelPHPではメソッド毎のレイアウト切り替えができません。
できないってことはないだろうと思っていろいろ試したのですが、どうやら本当にできません。
adminコントローラー内のログイン前とログイン後でレイアウト変えたかったのに(´@ω@`)

追記

コメント欄にてご指摘を頂きました!

メソッド事のレイアウト切り替え、できるそうです!
上司にできないって言ってしまった……orz

メソッド毎のレイアウト切り替えの方法は以下にあります。

Controller_Templateのaction内で、$this->templateを変更する

ご指摘ありがとうございました(´@ω@`)

17
16
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16