kindle本「速習Laravel 6」のまとめ。
点数
83点
感想
とてもわかりやすくまとめられていた。
使いこなすにはもっと細かい情報が必要だが、全体を把握するだけであれば充分な内容だと思う。
基本
インストール
- Composerをインストール
composer require laravel/installer
./vendor/bin/laravel new MyApp
※ laravel newは最新バージョンがインストールされる。
バージョンを指定する場合はcomposer create-project "laravel/laravel=6.*" MyApp --prefer-dist
※ –prefer-distをつけるとzipでダウンロードされるので高速になるcd MyApp
php artisan serve
で開発用サーバで実行
※ MyAppディレクトリをWEBサーバの公開ディレクトリをアップすると、http://xxx.xx/MyApp/public/で確認可能となる。
⇒ドキュメントルートの設定をMyApp/publicにすることでhttp://xxx.xx/で確認可能となる。
コントローラの作成
php artisan make:controller ItemsController
- app/HTTP/Controllers/ItemsController.phpにアクションを追加
public function index()
{
return view('items.index', ['msg' =>'こんにちは']);
}
- resources/views/items/index.blade.phpを作成
{{ $msg }}
- routes/web.phpに追加
Route::get('items', 'ItemsController@index');
※先頭にスラッシュは付けない(デフォルトルート「/」は例外)
データベース接続設定とモデルの作成
- .envを編集
DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
※ config/database.phpを編集してもいいが、基本的には.envで管理する
※php artisan config:cache
で反映する必要あり php artisan make:model Item
app/Item.phpが生成される。
※php artisan make:model Models/Item
とするとapp/Models/Item.phpに生成される。
※ -mでマイグレーション、-fでファクトリ、-cでコントローラも同時に作成される。- コントローラで利用
$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; ?>
レイアウト
- 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
- 個別のテンプレートでレイアウトを利用する。
@extends('layouts.base')
@section('title', 'レイアウトテスト')
@section('main')
<p>{{ $msg }}</p>
@endsection
※ 単一行の場合は@section(‘xxx’, 値)、タグまたは複数行の場合は@section(‘xxx’)〜@endsection
コンポーネント
コンポーネントは、普通のテンプレートにすぎない。
- resources/views/componentsにxxx.blade.phpを生成
<p>{{ $slot }} </p>
- 個別のテンプレートでコンポーネントを利用する。
@component('components.xxx')
<hr>Hoge!<hr>
@endcomponent
⇒<p><hr>Hoge!<hr></p>
となる
変数を複数定義した場合、@slot('xxx')〜@endslot
が名前付きのスロットとなり、それ以外は$slotに渡される。
- コンポーネント
<div>
<h3>{{ $id }}</h3>
<p>{{ $slot }}</p>
</div>
- 利用
@component('components.xxx')
@slot('id')
<span>{{ $id }}</span>
@endslot
<br>hogehoge
@endcomponent
サブビュー
@include(xxx)
で他のビューをサブビューとして利用することができる。
例えば、上記コンポーネントを@include('components.xxx')
として利用することができる。
サブビューにはスロットという概念はないが、呼び出し側の変数はサブビューでも参照できる。
コンポーネントは独立した部品と切り出さしたものだが、サブビューはメインビューの一部を別ファイルとして切り出しているだけ。