「速習Laravel 6」の感想・備忘録1

スポンサーリンク

kindle本「速習Laravel 6」のまとめ。

点数

83点

感想

とてもわかりやすくまとめられていた。

使いこなすにはもっと細かい情報が必要だが、全体を把握するだけであれば充分な内容だと思う。

基本

インストール

  1. Composerをインストール
  2. composer require laravel/installer
  3. ./vendor/bin/laravel new MyApp
    ※ laravel newは最新バージョンがインストールされる。
    バージョンを指定する場合はcomposer create-project "laravel/laravel=6.*" MyApp --prefer-dist
    ※ –prefer-distをつけるとzipでダウンロードされるので高速になる
  4. cd MyApp
  5. php artisan serveで開発用サーバで実行
    ※ MyAppディレクトリをWEBサーバの公開ディレクトリをアップすると、http://xxx.xx/MyApp/public/で確認可能となる。
    ⇒ドキュメントルートの設定をMyApp/publicにすることでhttp://xxx.xx/で確認可能となる。

コントローラの作成

  1. php artisan make:controller ItemsController
  2. app/HTTP/Controllers/ItemsController.phpにアクションを追加
    public function index()
    {
      return view('items.index', ['msg' =>'こんにちは']);
    }
  3. resources/views/items/index.blade.phpを作成
    {{ $msg }}
  4. routes/web.phpに追加
    Route::get('items', 'ItemsController@index');
    ※先頭にスラッシュは付けない(デフォルトルート「/」は例外)

データベース接続設定とモデルの作成

  1. .envを編集
    DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
    ※ config/database.phpを編集してもいいが、基本的には.envで管理する
    php artisan config:cacheで反映する必要あり
  2. php artisan make:model Item
    app/Item.phpが生成される。
    php artisan make:model Models/Itemとするとapp/Models/Item.phpに生成される。
    ※ -mでマイグレーション、-fでファクトリ、-cでコントローラも同時に作成される。
  3. コントローラで利用
    $items = App\Item::all();

ビュー

Bladeの構文

  • HTMLエスケープの無効化
    {!! $hoge !!}
  • {{}}の無効化={{}}をそのまま表示
    @{{ $hoge }}
  • コメントアウト
    {{-- これはコメントです・ --}}
  • @forelse〜@empty文
    @forelse ($users as $user)
    <li>{{ $user->name }}</li>
    @empty
    <p>ユーザなし</p>
    @endforelse

    ※ @emptyは必須
  • CSRF対策用ワンタイムキー
    @csrf
  • @break, @continueには条件を書くことができる
    @break($loop->index > 3)
    @continue($loop->odd)
  • @isset
    @isset($msg)
    <p>$msgが存在するかつnullでない</p>
    @else
    <p>$msgが存在しないまたはnull</p>
    @endisset

ループ変数

ループ内では$loopという特別な変数にアクセスすることができる。
オブジェクト型であり、以下のプロパティを持っている。

  • index:0スタート
  • iteration:1スタート
  • remaining
  • count
  • first:最初かどうか
  • last:最後かどうか
  • even:偶数回目かどうか
  • odd:奇数回目かどうか
  • depth:入れ子レベル
  • parent:親のループ変数

Bladeを利用しない選択肢

以下のように、Blade構文を使わずにPHP標準のタグで記述することも可能である。
ただし、せっかくLaravelを使うのであればBladeを使うべきである。

<?php print($msg); ?>
<?php if ($i > 100) : ?>
<p>hoge</p>
<?php endif; ?>

レイアウト

  1. resources/views/layoutsにxxx.balde.phpを生成
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>@yield('title', 'デフォルト値')</title>
</head>
<body>
@section('main')
<p>デフォルト値</p>
<p>デフォルト値</p>
@show
</body>
</html>

※ デフォルト値が単一行の場合は@yield(‘xxx’)、タグまたは複数行の場合は@section(‘xxx’)〜@show

  1. 個別のテンプレートでレイアウトを利用する。
@extends('layouts.base')
@section('title', 'レイアウトテスト')
@section('main')
<p>{{ $msg }}</p>
@endsection

※ 単一行の場合は@section(‘xxx’, 値)、タグまたは複数行の場合は@section(‘xxx’)〜@endsection

コンポーネント

コンポーネントは、普通のテンプレートにすぎない。

  1. resources/views/componentsにxxx.blade.phpを生成
    <p>{{ $slot }} </p>
  2. 個別のテンプレートでコンポーネントを利用する。
    @component('components.xxx')
    <hr>Hoge!<hr>
    @endcomponent

    <p><hr>Hoge!<hr></p>となる

変数を複数定義した場合、@slot('xxx')〜@endslotが名前付きのスロットとなり、それ以外は$slotに渡される。

  1. コンポーネント
    <div>
    <h3>{{ $id }}</h3>
    <p>{{ $slot }}</p>
    </div>
  2. 利用
    @component('components.xxx')
    @slot('id')
    <span>{{ $id }}</span>
    @endslot
    <br>hogehoge
    @endcomponent

サブビュー

@include(xxx)で他のビューをサブビューとして利用することができる。
例えば、上記コンポーネントを@include('components.xxx')として利用することができる。
サブビューにはスロットという概念はないが、呼び出し側の変数はサブビューでも参照できる。

コンポーネントは独立した部品と切り出さしたものだが、サブビューはメインビューの一部を別ファイルとして切り出しているだけ。

コメント