コントローラの作成
今回は、コントローラの作成からビューへの変数・配列の受け渡しまでやってみる。
ますはコントローラを作成しよう。お決まりの"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〜?>と括って記述していた時よりも、ずっと楽だった。
ディレクティブには様々な種類があるそうので、随時活用していきたい。
今回はここまで。