FuelPHPのビュー

今日はFuelPHPのビューについて調べてみたいと思います。FuelPHPのビューファイルは基本的に、『fule/app/views』フォルダ内にコントローラと同じ名前のフォルダを作成し、その中に格納します。また、ビューを呼び出す場合は、コントローラ名/メソッド名で呼び出します(例:fuel/app/views/sample1/index.phpを呼び出すには、sample1/index(indexは省略可)で指定します)。

1) それでは、実際に作成しながら調べてみたいと思います。『fuel/app/classes/controller/sample1.php』のindexメソッドを下記のように記述します。

public function action_index()
 {
 $data=array();
 $data['title']='<h1>Hello WinRoad徒然草!</h1>';
 $data['description']='<h2>FuelPHPのテストサイトです</h2>';
 //静的メソッドの呼び出し
 $view=View::forge('sample1/index',$data);
 return $view;

3) 『fuel/app/views/sample1/index.php』を下記のように変更します。尚、FuelPHPのデータ表示は、<?=$this->title?>ではなくて、<?=$title?>で済むのは簡単でいいですね。

<!DOCTYPE HTML>
 <html>
 <head>
 <meta charset="utf-8">
 <title>Sample1</title>
 </head>
 <body>
 <p><?=$title?></p>
 <p><?=$description?></p>
 <p>これはsample1のビューファイルです</p>
 </body>
 </html>

4) ブラウザで確認してみます。Viewクラスのforgeメソッドで、htmlタグはエスケープされ、そのまま文字として表示されています。

5) 次に、forgeメソッドの第3引数にfalseを入力します。

$view=View::forge(‘sample1/index’,$data,false);

6) htmlのタグは適用され、文字の大きさが<h1><h2>タグの指定の大きさになっています。これは、デフォルトでhtmlentitiesでフィルターをかけ、XSS脆弱性に対するセキュリティ対策を施しているという事ですね。初心者には嬉しいですね。

7) これ以外のデータの渡し方も、簡単に記述しておきます。詳細はマニュアルサイトにありますので、参考にして下さい。

例1

$view=View::forge('sample1/index');
 $view->title='Hello WinRoad徒然草';
 $view->description='FuelPHPのテストサイトです';
 return $view;

例2

$view=View::forge('sample1/index');
 $view->set('title','Hello WinRoad徒然草');
 $view->set('description','FuelPHPのテストサイトです');
 return $view;

ビューのレイアウト

8) FuelPHPのビューはネスト(入れ子)出来るので、簡単にレイアウトが作成出来るみたいですね。それでは実際に試してみます。尚、毎回フォルダ構成とファイル名を宣言してからを記述するのは面倒ですので、コードの前にフォルダ構成とファイル名を記載します。下記の3つのファイルを作成します。

fuel/app/views/sample1/header.php

<div class="header">
<?=$title?>
</div>

fuel/app/views/sample1/content.php

<div class="content">
<h1>ようこそ<?=$title?></h1>
<p><?=$description?></p>
</div>

fuel/app/views/sample1/footer.php

<div class="footer">
@Copyright<?=date('Y')?><?=$title?>
</div>

9) index.phpを修正します。

fuel/app/views/sample1/index.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>ビューのレイアウト</title>
</head>
<body>
<?=$header?>
<?=$content?>
<?=$footer?>
</body>
</html>

10) sample1コントローラのindexメソッドを修正します。

fuel/app/classes/controller/sample1.php

<?php
 class Controller_Sample1 extends Controller
 {
 public function action_index()
 {
 //静的メソッドの呼び出し
 $view=View::forge('sample1/index');
 //基本データのセット
 $view->set_global('title','WinRoad徒然草');
 $view->set_global('description','FuelPHPのテストサイトです');
 //ビューファイルのネスト
 $view->header=View::forge('sample1/header');
 $view->content=View::forge('sample1/content');
 $view->footer=View::forge('sample1/footer');
 return $view;
 }
 }

11) それではブラウザで確認してみます。『http://localhost/fuelphp/sample1』と入力します。

本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

トラックバック

コメント

  1. 山田 より:

    はじめまして。
    貴重なサンプルを提供して頂き、ありがとうございます。

    以下、2点気づいた箇所をお知らせします。
    1.fuel/app/views/sample1/header.phpの2行目
     誤:
     正:

    2.fuel/app/classes/controller/sample1Controller.php
     ファイル名はsample1.php

    以上です。

    • nakada より:

      山田 様
      ご指摘ありがとうございます。
      早速修正させていただきました。
      このブログも検証後に一気に書き上げればいいのかもしれませんが、検証の経過もお届けしたいので、検証前に記述して、バグがあった箇所のコードを修正し忘れたりすることも多々あります。
      なるべく皆様に正しい情報をお届けしたいので、記述ミスのご指摘はありがたく思っています。これからも宜しくお願い致します。
      尚、指摘2のファイル名はCakePHPの命名規則に則ったファイル名ですね。CakePHPも同時に検証中ですので、ごっちゃになることも多いです。こちらも気をつけます。(^0^)


コメントをどうぞ

このページの先頭へ