Symfoware

Symfowareについての考察blog

PHPフレームワーク「Laravel」のビューの使い方

PHPフレームワーク「Laravel」の使い方を調べています。
PHPフレームワーク「Laravel」でクッキーを使用する

今回はビューの使い方を調べてみます。
http://laravel.com/docs/responses


ビュー用のファイルの保存場所



画面の表示に使用するphpファイルは、「app/views」に保存するのが
基本ルールです。

こんなファイルを作成して、app/viewsに「testview.php」という名前で保存しました。


  1. <!-- app/views/testview.php で保存 -->
  2. <html>
  3.     <body>
  4.         <h1>こんにちは、<?php echo $name; ?></h1>
  5.     </body>
  6. </html>




app/routes.phpを編集し、作成したtestviewを呼び出してみます。


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     return View::make('testview', array('name' => 'Symfoware'));
  5. });




ブラウザで表示してみると、ちゃんと作成したビューが呼び出されました。

450_01.png





ビューへのデータの渡し方いろいろ



ビューへのデータの渡し方は、上記の例のようにarrayを設定するやり方


  1. View::make('testview', array('name' => 'Symfoware'))




withを使用するパターン。


  1. View::make('testview')->with('name', 'Symfoware')




with[キー名]を使用するパターン


  1. View::make('testview')->withName('Symfoware')




全て同じ結果になりました。


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     // arrayでデータを設定
  5.     //return View::make('testview', array('name' => 'Symfoware'));
  6.     
  7.     // withを使用
  8.     //return View::make('testview')->with('name', 'Symfoware');
  9.     
  10.     // with[キー名]を使用
  11.     return View::make('testview')->withName('Symfoware');
  12.     
  13. });





例えばwithNameKanaを指定した場合


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     return View::make('testview')->withNameKana('シンフォ');
  5.     
  6. });




値を受け取るビューでの記載は「name_kana」となります。


  1. <!-- app/views/testview.php で保存 -->
  2. <html>
  3.     <body>
  4.         <h1>こんにちは、<?php echo $name_kana; ?></h1>
  5.     </body>
  6. </html>





こういう指定でもOKでした。


  1. View::make('testview')->withName_kana('シンフォ');








withで複数の値を設定したい場合




View::makeの戻り値はviewです。
戻り値を変数に退避して再度設定すればOK。


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     
  5.     $view = View::make('testview');
  6.     $view->with('name', 'Symfo');
  7.     $view->with('name_kana', 'シンフォ');
  8.     
  9.     return $view;
  10.     
  11. });




  1. <!-- app/views/testview.php で保存 -->
  2. <html>
  3.     <body>
  4.         <h1>こんにちは、<?php echo "$name($name_kana)"; ?></h1>
  5.     </body>
  6. </html>



450_02.png



また、withの戻り値もviewなので、チェーンメソッドで記載できます。


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     
  5.     return View::make('testview')
  6.             ->with('name', 'Symfo')
  7.             ->with('name_kana', 'シンフォ');
  8.     
  9. });








全てのビューで共通の値



全てのビューで同じ設定値となるものを


  1. View::share('name', 'Symfo');



と指定できます。
ぱっと思いつく例では、グーグルアナリティクスの解析コードとかでしょうか。


  1. <?php
  2. View::share('name', 'SYMFO');
  3. Route::get('/', function()
  4. {
  5.     
  6.     return View::make('testview')->with('name_kana', 'シンフォ');
  7.     
  8. });




  1. <!-- app/views/testview.php で保存 -->
  2. <html>
  3.     <body>
  4.         <h1>こんにちは、<?php echo "$name($name_kana)"; ?></h1>
  5.     </body>
  6. </html>




450_03.png





ビューの入れ子



Webサイトを作るとき、1つの画面を1つだけのビューで定義することは稀で、
ヘッダーやサイドバーのhtmlは共有化すると思います。
ビューの中でビューを呼び出してみます。

app/viewsに「child」というディレクトリを作成。
「testchildview.php」をいうファイルを作成しました。


  1. <!-- app/views/child/testchildview.php で保存 -->
  2. <div><?php echo $name_kana; ?>(childview)</div>





これを呼び出す「tesetview.php」はこんな感じ。


  1. <!-- app/views/testview.php で保存 -->
  2. <html>
  3.     <body>
  4.         <h1>こんにちは、<?php echo $name; ?></h1>
  5.         <?php echo $child; ?>
  6.     </body>
  7. </html>




「$child」という名前で呼び出しています。
この「$child」はどこから来たかというと、routes.php。


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     
  5.     // 親のviewを作成して値を設定
  6.     $view = View::make('testview');
  7.     $view->with('name', 'symfo');
  8.     
  9.     // 子のビューを設定
  10.     $view->nest('child', 'child.testchildview', array('name_kana' => 'シンフォ'));
  11.     
  12.     return $view;
  13.     
  14. });




ここで「child」と「testchildview」の関連付けを行っています。
ディレクトリセパレーターは「.」で表現するようです。

450_04.png


また、こういう書き方でも動いてくれました。


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     
  5.     // 親のviewを作成して値を設定
  6.     $view = View::make('testview');
  7.     $view->with('name', 'symfo');
  8.     
  9.     // 子のviewを作成して値を設定
  10.     $childview = View::make('child.testchildview');
  11.     $childview->with('name_kana', 'シンフォ');
  12.     
  13.     // 子のビューを設定
  14.     $view->with('child', $childview);
  15.     
  16.     return $view;
  17.     
  18. });








ビューの存在チェック



ビューが存在するかは「View::exists」でチェックできるようです。


  1. if (View::exists('emails.customer'))
  2. {
  3.     //hoge
  4. }







ビューコンポーサー



特定のビューが呼び出されるときに処理したい内容を記載できます。
いろいろなページで使用されているパーツ的なビューの処理をまとめるときに
重宝しそうです。


まず、ページ本体。


  1. <!-- app/views/testview.php で保存 -->
  2. <html>
  3.     <body>
  4.         <h1>こんにちは、<?php echo $name; ?></h1>
  5.         <?php echo $child; ?>
  6.     </body>
  7. </html>




埋め込まれるページ。


  1. <!-- app/views/child/testchildview.php で保存 -->
  2. <div><?php echo $access_count; ?>(childview)</div>





埋め込まれるtestchildviewが呼び出されるたびに、値をセットします。


  1. <?php
  2. Route::get('/', function()
  3. {
  4.     
  5.     // 親のviewを作成して値を設定
  6.     $view = View::make('testview');
  7.     $view->with('name', 'symfo');
  8.     
  9.     // 子のビューを設定
  10.     $view->nest('child', 'child.testchildview');
  11.     
  12.     return $view;
  13.     
  14. });
  15. // child.testchildviewが表示されるときに呼び出される。
  16. View::composer('child.testchildview', function($view)
  17. {
  18.     // パーツの中に値を流し込む
  19.     $view->with('access_count', 'xx回目のアクセスです。');
  20. });




450_05.png


また、引数にarrayを指定することで、複数のviewに対して
同じコンポーサーを割り当てることも可能です。

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/08/13(水) 23:17:06|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PHPフレームワーク「Laravel」でプログラムエラーの表示 | ホーム | PHPフレームワーク「Laravel」でクッキーを使用する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1463-fce61a00
この記事にトラックバックする(FC2ブログユーザー)