書籍「PHPフレームワーク Laravel入門」のまとめ。
点数
78点
感想
1つずつ手を動かしながら進めていけるので、入門書としてはいいと思う。
ただし、基本的な内容が多いので、Laravelを使いこなすには物足りない。
誤字がいくつかあったのが気になった。
準備
インストール
composer create-project "laravel/laravel=6.*" MyApp --prefer-dist
基本
ルート情報
Route::get('/', 'IndexController@index');
Route::post('/confirm', 'IndexController@confirm');
コントローラー
class IndexController extends Controller
{
public function index(Request $request)
{
return view('index.index', ['name' => $request->input('name', 'hoge')]);
}
}
テンプレート
<p>{{ $name }}</p>
<form method="post" action="{{ action('IndexController@confirm') }}">
{{ csrf_field() }}
<input type="text" name="msg">
<button type="submit">送信</button>
</form>
View
レイアウト
レイアウトを作成し、@extendsで使用する。
動的部分をレイアウトに@yieldで定義し、@section(複数行の場合は@senction-@endsection)で使用する。
views/layouts/xxx.blade.phpを作成
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title')</title>
</head>
<body>
@yield('content')
</body>
</html>
個別テンプレートで使用する
@extends('layouts.xxx')
@section('title', 'トップページ')
@section('content')
<h1>トップページ</h1>
<p>{{ $name }}</p>
@endsection
コンポーネントとサブビュー
ヘッダーやフッターなど、別ファイルで管理したい場合に使う。
コンポーネントもサブビューも定義は普通のblaseテンプレートである。
コンポーネントは呼び出し時に@slotで変数を渡すが、サブビューはincludeの第2引数で渡す(呼び出し側の変数はサブビューでも参照できる)。
使用時、コンポーネントは@component-@endcomponent、サブビューは@includeである。
views/compnents/footer.blade.phpを作成
<footer>
<hr>フッターです。{{ $slotVar1 }}{{ $slotVar2 }}
</footer>
使用
@component('components.footer')
@slot('slotVar1')
スロットを使った変数1です。
@endslot
@slot('slotVar2')
スロットを使った変数2です。
@endslot
@endcomponent
@php
$slotVar1 = 'サブビューでは、呼び出し元の変数がそのまま利用できます。';
@endphp
@include('components.footer', ['slotVar2' => 'includeの第2引数です。'])
コレクションビュー
配列やコレクションを繰り返して表示するために使う。
views/compnents/item.blade.phpを作成
<p>{{ $item['id'] }}:{{ $item['name'] }}</p>
@eachで使用
@each('components.item', [
['id' => 1, 'name' => 'hoge1'],
['id' => 2, 'name' => 'hoge2']
], 'item')
ビューコンポーザ
ビューのためのビジネスロジックを記述するところ。
「ビューに@php〜@endphpでビジネスロジックを書くのではなく、ビューコンポーザに書こう」という感じ。
- ビューコンポーザに書いた処理は、レンダリングの際に自動実行される。
- ビューコンポーザを利用するためには、ServiceProviderを継承したクラスを作成し、bootメソッドに処理を記述する。
- ビューコンポーザにはViewインスタンスが引数として渡される。
サービスプロバイダを作成
php artisan make:provider HelloServiceProvider
bootメソッドにビジネスロジックを追加
Illuminate\Support\Facades\View::composer('index.index', function($view) {
$view->with('comment', 'hello');
});
// ※ 第1引数は*指定や配列にすることが可能
// (composersメソッドもあるが、引数の順番が逆になるので注意)
// ※ 第2引数を関数ではなくクラスにすることも可能
config/app.phpのproviders配列に追加して、有効にする
App\Providers\HelloServiceProvider::class,
コメント