「PHPフレームワーク Laravel入門」の感想・備忘録1

スポンサーリンク

書籍「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,

コメント