Laravelのビュー

昨日は、『Laravelのコントローラ』で、コントローラの使い方を調べてみました。本日は、Laravelのビューについて調べてみたいと思います。Laravelのビューは単なるphpファイルを使うことも出来ますし、Bladeと呼ばれるテンプレートエンジンを使うことも出来ます。Bladeテンプレートエンジンまで調べると時間がかかりそうですので、本日はビューについてのみ調べてみたいと思います。

基本

1. 全てのビューはapplication/viewsフォルダの中に設置され、拡張子にphpを付けます。Viewクラスのmakeメソッドで、ビューファイルを指定することで表示することが出来ます。

2. ビューファイルのパスを指定するには、『ピリオド(.)』を使う点を注意して下さい。多くのフレームワークでは、パスの指定は『スラッシュ(/)』を使用していますので、注意が必要です。

3. ビューの基本的な表示方法は、『PHPフレームワークLaravelの導入』の後半部分でも紹介していますので、重複しますが、簡単に説明いたします。

4. まず、ビューファイルを作成します。下記のような簡単なビューファイルを作成します。単なるHTMLファイルですが。

laravel/application/views/hello/index.php

<!doctype html>
 <html>
 <head>
 <meta charset="utf-8">
 <title>index.php</title>
 </head>
 <body>
 <h1>ビューファイル</h1>
 これはviews/hello/index.phpを表示しています。
 </body>
 </html>

5. ビューファイルを表示するには、ルートから直接ビューファイルを呼び出す方法と、コントローラからビューファイルを呼び出す方法があります。まず、ルートから直接ビューファイルを呼び出す方法を紹介します。routes.phpに下記のように記述します。

laravel/application/routes.php

Route::get('hello',function(){
 return View::make('hello.index');
 });

2行目は、hello/indexではなく、hello.indexとピリオドで指定します。尚、コントローラを呼び出すときは、indexは省略できますが、ビューファイルを呼び出すときは必ずindex迄記述して下さい。

6.  次にコントローラからビューを呼び出してみます。コントローラ内にhello.phpを作成して、下記のように記述します。

laravel/application/controllers/hello.php

<?php
 class Hello_Controller extends Base_Controller{
 public function action_index(){
 return View::make('hello.index');
 }
 }

7. そして、先程のルートの記述を削除して、helloコントローラをルーティングするために下記のように記述します。

laravel/application/routes.php

//helloコントローラをルートで登録
Route::controller('hello');

尚、コントローラを複数同時に登録する場合は、’hello’のところを配列で指定します。

8. ブラウザで確認してみます。ルートから呼び出しても、コントローラから呼び出しても同じビューファイルを表示します。

http://localhost/laravel/public/hello

ビューにデータを渡す

9. それでは、ビューにデータを渡す方法とその渡されたデータの表示方法を調べてみましょう。同じようなコードを何度も記述するのは、面倒ですので、以降特別に指定が無い限りコントローラから処理する方法で検証していきたいと思います。コントローラはルーティングされているものとします。

10. ビューにデータを渡すには、色々な方法があります。まずwithメソッドを使う方法を紹介します。withメソッドは、第1引数にデータ名、第2引数に値を指定します。それでは、記述例を下記に記載します。

laravel/application/controllers/hello.php

public function action_index(){
 $view=View::make('hello.index')
 ->with('name','nakada')
 ->with('address','東京都目黒区')
 ->with('email','nakada@winroad.info');
 return $view;
 }

12. ビューファイルを下記のように修正します。

laravel/application/views/hello/index.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>index.php</title>
</head>
<body>
<h1>views/hello/index.php</h1>
<p>名前:<?php echo $name;?></p>
<p>住所:<?php echo $address;?></p>
<p>メール:<?php echo $email;?></p>
</body>
</html>

13. ブラウザで表示してみます。

14. 次に配列でデータを渡す方法を下記に記述します。以下全てブラウザの表示は上と同じですので省略します。

 laravel/application/controllers/hello.php

public function action_index(){
$data=array(
 'name'=>'nakada',
 'address'=>'東京都目黒区',
 'email'=>'nakada@winroad.info'
 );
 return View::make('hello.index',$data);

15. マジックメソッドを使ってデータを渡す方法。

public function action_index(){
$view=View::make('hello.index');
 $view->name='nakada';
 $view->address='東京都目黒区';
 $view->email='nakada@winroad.info';
 return $view;
 }

16. 配列アクセスインターフェイス方式でデータを渡す方法。

public function action_index(){
 $view=View::make('hello.index');
 $view['name']='nakada';
 $view['address']='東京都目黒区';
 $view['email']='nakada@winroad.info';
 return $view;
}

ビューのネスト

17. ビューの中にビューを表示する場合、Laravelではnestメソッドを使います。それでは、ヘッダー用のビューファイルを下記のように作成します。

larevel/application/views/hello/header.php

<header style="background-color:#0FF">
<h1><?php echo $title;?></h1>
<p><?php echo $description;?></p>
</header>

18. indexビューだけではなく、上記のネストしたheaderビューにもデータを渡します。コントローラを下記のように記述します。

laravel/application/controllers/hello.php

public function action_index(){
 //indexに渡すデータの作成
 $data=array(
 'name'=>'nakada',
 'address'=>'東京都目黒区',
 'email'=>'nakada@winroad.info'
 );
 //headerに渡すデータの作成
 $header_data=array(
 'title'=>'WinRoad徒然草',
 'description'=>'日常の業務をつれづれなるままに書き綴っています。'
 );
 //ビューにデータを渡す
 $view=View::make('hello.index',$data);
 //ネストしたheaderにデータを渡す
 $view->nest('header','hello.header',$header_data);
 return $view;
}

nestメソッドは、第1引数に渡したビュー(index.php)上で使用される変数名、第2引数はネストしたビューファイル(header.php)のパス(必ずピリオドで繋ぎます)、第3引数は、ネストしたビューファイルへ渡すデータです。尚、ネストしたビューファイルに特に渡すデータが無い場合は、第3引数は省略できます。

19. ビューファイルを下記のように修正します。

laravel/application/views/hello/index.php

<!doctype html>
 <html>
 <head>
 <meta charset="utf-8">
 <title>index.php</title>
 </head>
 <body>
 <?php echo @$header;?>
 <p>名前:<?php echo $name;?></p>
 <p>住所:<?php echo $address;?></p>
 <p><?php echo $email;?></p>
 </body>
 </html>

ネストしたビューファイルを表示する場合は変数名の前にアットマーク(@)を記述するようにしてください。

20. ブラウザで確認してみます。下記のようになりました。

http://localhost/laravel/public/hello

ビューの項目には、他にもrenderヘルパーや、名前付きビュー、ビューコンポ-サー等、色々ありますが、取り急ぎ必要は無いと思いますので、後日調べたいと思います。

次回は『データベースの接続設定』について調べてみます。

本日は以上です。

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

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

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

コメントをどうぞ

このページの先頭へ