LaravelのBladeテンプレート
PHPのフレームワーク「Laravel」のコントローラーの簡単な使い方とBladeテンプレートについて、備忘録も兼ねて残しておく。
Laravelのインストール方法については、割愛。ダウンロードして、この辺を参考にすれば、基本どうにかなるので。
- コントローラーを使うにあたり、下準備
- 今回やりたい事
- コントローラーを作成して、LaravelのBladeテンプレートを使いViewを表示する
- まずは、新規にショッピングコントローラーを作成
- ファイル名 application/controllers/shopping.php
<?php class Shopping_Controller extends Base_Controller { // とりあえず、何もない状態 public function action_index(){ echo "shopping controller!"; } } ?>
-
-
- 作成したコントローラーをapplication/routes.php 内で登録する
- Route::controller(array("home","shopping")); をどっかに記述するだけ
- http://example/shopping/index/ でアクセス可能。この辺は普通のフレームワークと同じ。
- アクションメソッドは action_アクション名 の形式でOK。
- 引数を取るアクションの場合は、action_method($param1,$param2) という具合。
- http://example/shopping_cart/method/1/2/
- このへんも他のフレームワークとほぼ同じ。
- コントローラー周りに関することは、また、別の記事で。
- 引数を取るアクションの場合は、action_method($param1,$param2) という具合。
- 作成したコントローラーをapplication/routes.php 内で登録する
-
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>@yield("page_title")</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> {{HTML::style("css/bootstrap/css/bootstrap.min.css")}} {{HTML::script("js/jquery-1.7.2.min.js")}} {{HTML::script("css/bootstrap/js/bootstrap.min.js")}} </head> <body> <div class="container"> @include("partials.header") @yield("content") @include("partials.footer") </div>
-
- Bladeテンプレートの基礎
- {{ }}ブロック
- 変数の出力
- この中には、PHPコードが書ける
- {{$a}}、{{10*3}}、{{$a+1}} など基本なんでもOK。
- ちなみに、上のコードでは、Laravelのヘルパを呼び出してる。
- 変数の出力
- @yieldは特定のセクションの出力結果を表示するもの
- アクションViewファイル等で@section("section_name") @endsectionで囲まれた内容を @yieldで呼び出す
- アクションViewファイル内で@section("page_title")ようこそホームページへ@endsection と記述し、@yield("page_title")とした場合、「ようこそホームページへ」と出力される。
- アクションViewファイル等で@section("section_name") @endsectionで囲まれた内容を @yieldで呼び出す
- @include("〜〜")は文字通り、見たままパーツの読み込みに使用する
- @include("partials.header")は application/views/partials/header.blade.php を読み込む
- {{ }}ブロック
- Bladeテンプレートの基礎
@layout("layouts.default") @section("page_title") カテゴリー一覧 @endsection @section("content") <h2>カテゴリー一覧</h2> <ul> @forelse ($categoryList as $category) <li> <a href="<?php echo URL::to("shopping/category/"); ?><?php echo $category->category_id ?>/"> <?php echo $category->category_name ?> </a> </li> @empty <li>カテゴリーが見つかりませんでした</li> @endforelse </ul> @endsection
-
- アクションViewテンプレートからレイアウトを指定する
- @layout("layouts.default")
- .(ドット)がディレクトリ区切り
- application/views/layouts/default.blade.php
- @layout("layouts.default")
- @section("content") 〜 @endsection がコンテンツ。
- もちろん、"content" という名前で縛る必要はない。
- @section("page_title")カテゴリー一覧@endsection
- レイアウトテンプレートで@yield("page_title")で呼びだすと、カテゴリー一覧が出力される
- ループ構文や条件分岐が可能
- @forelse @empty @endforelse
- Smartyでいう{foreaech}〜{foreachelse}〜{/foreach}
- @if ($a==1) 〜 @endif
- @forelse @empty @endforelse
- アクションViewテンプレートからレイアウトを指定する
- コントローラーファイル application/controllers/shopping.php を編集
- 以下、shoppingコントローラーのindexアクションで全てのカテゴリー一覧を取得して、Bladeテンプレートを使い表示するコード
- ちなみに、今回、使用するDBに関しては、前のエントリーを参照。
- 以下、shoppingコントローラーのindexアクションで全てのカテゴリー一覧を取得して、Bladeテンプレートを使い表示するコード
<?php class Shopping_Controller extends Base_Controller { // レイアウトテンプレートの指定 public $layout = "layouts.default"; // インデックスアクション public function action_index(){ // Viewsの指定 $view=View::make("shopping.index"); $view->with("categoryList",Category::all()); // 必ず、Viewを返却する return $view; } } ?>
-
- public $layout = "layouts.default"; でテンプレートファイルを指定する。
- アクションメソッドの中で、Viewにデータをセットして、レンダリングする
- $view=View::make("shopping.index");
- Viewファイルがapplication/views/shopping/index.blade.php の場合
- $view=View::make("shopping.index");
- Viewにデータをセットする場合、$view->with("categoryList",Category::all());
- Smartyでいうassign("key",$value);
- アクションの最後に、$viewオブジェクトを返却すれば、レンダリング
- return $view;
大筋ではこんな具合。Bladeテンプレートの詳細に関しては、
[ドキュメントとチュートリアル]
http://laravel.com/docs/views/templating
http://daylerees.com/2012/04/07/laravel-blade/
[電子書籍版]
http://daylerees.com/2012/03/31/release-code-happy/
などを参照。