コントローラの作成
今回は、コントローラの作成からビューへの変数・配列の受け渡しまでやってみる。
ますはコントローラを作成しよう。お決まりの"Hello,World!"
を表示させたいので、名前はHelloController
にする。
$ php artisan make:controller HelloController
Controller created successfully.
成功すると、app/Http/Controllers
にHelloController.php
が作成されているはずだ。そこにpublic function index ()
以下の部分を追記する。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
public function index ()
{
$hello = 'Hello,World!';
$hello_array = ['Hello', 'こんにちは', 'ニーハオ'];
return view('index', compact('hello', 'hello_array'));
}
}
動作の流れはこうだ。compactメソッド
を使えば、ビューに変数と配列を渡すことができる。この場合、変数や配列であっても$
を表記しないことに注意しよう。
-
indexアクション
を作成する。 -
変数$hello
と配列$hello_array
を定義する。 -
viewメソッド
で、compactメソッド
で渡された内容を含んだindex.blade.php
を表示する。
ルーティングの設定
次はルーティングの設定だ。次の一文を追記する。
Route::get('/index', 'HelloController@index');
これで/index
でアクセスされた時に、HelloControllerのindexアクション
が実行される。
Bladeビューの作成
今回は動作確認をするだけなので、おさらいも兼ねてlayout.blade.php
を親ビューとするindex.blade.php
を作成することにする。
@extends('common.layout')
@section('index')
<p>{{ $hello }}</p>
@foreach ($hello_array as $hello_word)
{{ $hello_word }}<br>
@endforeach
@endsection
親ビューへの記載もお忘れなく。
@yield('index')
BladeはHTMLの書き方がベースにあるが、PHPの記述も直接可能だ。そのため、2つの記法がごちゃ混ぜにならないように注意したい。
変数の記述
{{ $変数名 }}
で出力が可能だ。変数を{{ }}
で括る理由もちゃんとある。
公式ドキュメントより(一部抜粋)
Bladeの{{ }}記法はXSS攻撃を防ぐため、自動的にPHPのhtmlspecialchars関数を通されます。
とっても便利。
配列の記述
ここで一例として@foreachディレクティブ
を使ってみる。
まず、PHPのforeach文
なら通常こう記述するだろう。
<?php
foreach ($hello_array as $hello_word) {
echo $hello_word."<br>";
}
?>
上記の構文を@foreachディレクティブとしてBladeビューに記述
する時は、ここが違う。
- 変数の出力に
echo
はいらない。 - 変数は
{{ $変数名 }}
で記述する。 - 改行する場合は
."<br>"
ではなく直接<br>
と記述する。 - 末尾の
;
はいらない。 -
{}
ではなく、@foreach〜@endforeach
で括る。
しかし、実際書いてみるとHTMLファイルの中で<?php〜?>
と括って記述していた時よりも、ずっと楽だった。
ディレクティブには様々な種類があるそうので、随時活用していきたい。
今回はここまで。