Laravel4のBladeテンプレート

今日は、Laravel4のBladeテンプレートについて調べてみたいと思います。Laravelには、コントローラのレイアウトでテンプレートを指定するコントローラレイアウトもありますが、Bladeテンプレートがかなり便利ですので、Laravel3との違いなどを調べてみたいと思います。

Bladeテンプレートの定義

1. それでは、まず下記にBladeテンプレートのマスタービューを定義してみます。TwitterBootstrapを使用してレイアウトしています。

app/views/layouts/master.blade.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>マスタービュー</title>
<meta name="viewport" content="width=device-width,minimum-scale=1">
<link href={{ URL::to('tbs/css/bootstrap.min.css')}} rel="stylesheet">
<link href={{ URL::to('tbs/css/bootstrap-responsive.min.css')}} rel="stylesheet">
</head>
<body>
<div class="navbar">
<div class="navbar-inner">
<div class="ccontainer">
<a href="#" class="brand">WinRoad徒然草</a>
<ul class="nav">
 @section('navigation')
 <li><a href='#'>TOP</a></li>
 <li><a href='#'>UPDATE</a></li>
 @show
</ul>
</div>
</div>
</div>
<div class="container">
 @yield('content')
</div>
<script src="http://code.jquery.com/jquery-1.9.1.min.js">
</script>
<script src={{ URL::to('tbs/js/bootstrap.min.js') }}></script>
</body>
</html>
  • 7-8行目:publicフォルダ内にtbs(任意)フォルダを作成しました。そして、ダウンロードして解凍したTwitterbootstrapのcss、img、jsフォルダをtbsフォルダにコピーしています。
  • 19行目:@showはLaravel3では、yield_sectionだったような気がします。
  • 27行目:jqueryはCDNから参照してくるように設定しています。
  • 29行目;public/tbs/jsフォルダから bootstrap.min.jsファイルを参照しています。
  • ※【追加情報】Htmlクラスが復活していますので、上記の7-8行目は下記のように記述することができます。
    {{ HTML::style('tbs/css/bootstrap.min.css') }}
    {{ HTML::style('tbs/css/bootstrap-responsive.min.css') }}

    また、29行目は下記のように記述できます。

    {{ HTML::script('tbs/js/bootstrap.min.js') }}

2. 次にhello/index.phpファイルを下記のように修正します。

laravel4/app/views/hello/index.blade.php

@extends('layouts.master')
@section('navigation')
 @parent
 <li><a href='#'>追加ナビ</a></li>
@stop
@section('content')
<h2>ようこそ{{ $name }}さん</h2>
<h2>あなたは{{ $jusyo }}に住んでいます。</h2>
<p>helloフォルダ内のindex.blade.phpファイルです。</p>
<?php echo $footer?>
@stop
  • 1行目の@extends()はLaravel3では、@layout()でした。
  • 5行目の@stopはLaravel3では、@endsectionでした。

3. ルーターは、『Laravel4のビュー』で作成したルーターをそのまま使っていますが、念のために下記に記述しておきます。

laravel4/app/routes.php

Route::get('hello', function() {
 $data['name']='中田';
 $data['jusyo']='東京都目黒区';
 $data['corporation']='Builwing';
 $view=View::make('hello/index',$data);
 $view->nest('footer','hello.footer',$data); 
return $view;});

4. ブラウザでアクセスしてみます。

http://localhost/laravel4/public/hello

laravel4_041

その他のBlade制御構文

5. データ出力のechoは、{{ $name }}と波括弧を使用します。そして、出力をエスケープしたい場合は、三重の波括弧にを使用します。{{{ $name }}}

6. If文に関しては、ほとんど変わっていないと思います。

@if(coutn($records) > 0)
 レコードがあった!
 @else
 レコードがなかった!
 @endif

7. ループ文も同じだと思いますので、省略します。

本日は以上です。

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

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

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

トラックバック

コメント

  1. HiroKws より:

    こんにちは、
    今気づきましたが、Laravel4で、Htmlクラスも復活しているようです。アセット関連へのリンク生成はこれも使用できるようです。(まだ、試していません。)
    Html::linkAsset($url, $title = null, $attributes = array(), $secure = null)

  2. HiroKws より:

    今試してみましたが、まだ使用できるレベルではありませんね。普通のリンクが生成されました。 😀

    • nakada より:

      川瀬様
      コメントありがとうございます。
      Laravel4では、FormクラスやHtmlクラスが標準装備されないという事でしたが、両方とも標準装備されるみたいですので、安心しました。
      尚、川瀬様の『Laravel4ドキュメント+』のおかげで、スムーズにLaravel4へ移行できそうです。
      これからもよろしくお願いいたします。

  3. Senju より:

    いつも、勉強をさせていただいています。貴重な情報をありがとうございます。

    まだまだ、始めたばかりで恐縮なのですが、Htmlクラスを挿入するとなぜだかエラーが出ます。{{ Html::style(‘tbs/css/bootstrap.min.css’) }}
    ログを確認すると、Class ‘Html’ not foundとでて、storage>viewsを探しているようでした。バージョンを確認したところlaravel4でしたので、報告を。
    何か設定が必要ですか?


コメントをどうぞ

このページの先頭へ