スロットとは(Laravel)

スロットとは

ヘッダーフッターを共通化
一部だけ、他の表示に差し替えなどができる機能

どれがスロット?

①名前なし
{{ $slot }}

②名前あり
<x-slot name="hoge">

{{ $hoge }}

事例①

login.blade.phpに、slotが使用されている例

  • <x-guest-layout>で囲ってる内容が、全て{{ $slot }} に該当する場合
    • guest-layoutコンポーネントを探す
    • 中身を見て、$slotを探す
    • {{ $slot }} を見つけたら、「何か差し込まれてるんだなぁ」と思ってください


事例②

名前が "logo"の例
<x-slot name="logo">

実際のslotがどう表現されるかとゆうと...
{{ $logo }}
となる

{{ $logo }}に、<x-slot name="logo">で囲われた部分が差し込まれる
これが名前ありslot


Bladeコンポーネント(Laravel)

Bladeコンポーネントとは

原則、頭に<x- からはじまる部品
<x- の後ろがコンポーネント名になる

2パターン存在する

1.クラスを使うBlade
app/View/Component/

2.クラス使わないBlade
resources/views/components/

最初にresources/を確認
なければ、Component/を確認

※Laravel Breezeがインストールされているため、それに沿ったディレクトリ構造になっています

ルーティングのグループ化・管理テクニック(Laravel)

似たようなルートの記述設定が多い時は、グループ化したほうがシンプルで管理しやすい

例えば、LaravelBreeze(認証用ライブラリ)を入れた際、以下のルーティング設定が追記されていた

Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
  • おおまかに、以下の手順で構成されている
    • ①グループで共通化したいオプションを指定(prefix / middleware / controller / name)
    • ②groupメソッドの中に、関数を作る
    • ③関数内で、ルーティング設定をまとめて管理


コントローラーやミドルウェアが共通の時も、グループ化できる

例えば、同じコントローラーを最初に一度だけ指定し、その中では、毎度コントローラーの指定をしなくて済む
ミドルウェアも同様

ルートURIやルート名でプレフィックスを使えて、共通化もできる

prefixメソッドを使用して、グループ内の各ルートに特定のURIやルート名を、プレフィックスとしてつけることができる

例えば、グループ内の全てのルートURIの前に、【admin】をつけることが可能
同じように、グループ内の全てのルート名に【admin.】をつけることも可能

ex. ルート名(admin.xxx)にしたい場合、【admin.】をプレフィックスとして共通化できる


RestFulなコントローラー(Laravel)

RestFulとは?

4つの原則からなる。

  1. 提供する情報が、URIを通して表現できること。全ての情報はURIで表現される一意なアドレスを持っていること。
  2. HTTPをベースにした、ステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせずに、それ自体で完結してること。
  3. 情報内部に、別の情報や、その情報の別の状態へのリンク等も含めることができること。
  4. 全てHTTPメソッドを使用すること

RestFul APIを使うメリット

  1. URIに規律が生まれることで、APIを利用するサービス開発者が楽になる
  2. URIに規律が生まれることで、API開発者もURIからソースのどの部分なのかが容易にわかる
  3. ブラウザのアドレスバーにURIを入力すればリソースが参照できる
  4. サーバ、クライアント間で何も共有しないことにより、負荷に応じたスケーラビリティが向上する。ステートレス性に値するもので、一番のメリットされている。
  5. GET、POST、PUT、DELETE等のHTTP標準のメソッドを使うことで、シンプルで一貫性のあるリクエスト標準化が円滑に行える。統一インターフェースに値する。

下記参照
qiita.com


RestFulなコントローラーとは?

よく使用するメソッド(CRUD等)が用意されたControllerを、一瞬で作成できる。

下記のコマンドを実行するだけで、7つの雛形メソッドが用意されたControllerを、数秒で作ることができる

php artisan make:controller ContactFormController --resource

できた。

下記参照
https://readouble.com/laravel/9.x/ja/controllers.html


routeも雛形に合わせた書き方をする

  • 手順
    • routesのweb.phpで、対象のControllerをuseする
    • web.phpに追加 Route::resource('contacts', ContactFormController::class);
    • php artisan route:list でルートに追加されてることを確認

追加されてた。

今回は、学習のためにもこの機能は使わず、自分でメソッドやルートは追加予定です。
ただ、楽すぎてびっくりしました。


php artisan:migrate 追加とロールバック(Laravel)

migrationファイルには、バージョン管理の役割もある。
後から列の追加や削除も可能
※チーム開発で威力を発揮する

テーブルにtitle列を追加するため、追加用のmigrationファイルを作成

php artisan make:migration add_title_to_contact_forms_table

作成用ではcreateから始まるが、追加用はaddから始まる。
先頭に作成日時。 バージョン管理がされている。



追加したい内容を、migrationファイルに設定

up()に追加していく。

  • 今回は、以下の設定をした。
    • 型はstring
    • 文字制限は50
    • title列を追加(name列の後ろ)
$table->string('title',50)->after('name');



履歴管理をするために、down()も作成

やっぱり削除したい!となった場合に、ロールバックできるよう、down()に以下を追記

$table->dropColumn('title');



ロールバック関連コマンド

// 1つ戻す
php artisan migrate:rollback
// 2つ戻す
php artisan migrate:rollback --step=2
// 順番にロールバックして再実行(downして再実行)
php artisan migrate:refresh
// テーブル全削除して再実行(down意識することなく、再実行)
php artisan migrate:fresh
// 履歴確認
php artisan migrate:status



まとめ

実際の運用では、こまめに履歴管理をしてないところもある。
migrate:freshで一括でテーブルを全て作り直しなどもある(らしい?)
現場によって違うので、様々な管理の方法があることを知っておくとよい。

php artisan migrate でテーブルを作る(Laravel)

簡易的なお問い合わせフォームアプリを作成するため、 必要なテーブルを作成していく。

model & migrationファイルを作成

モデルと、モデルに対応するマイグレーションファイルを同時に作成

php artisan make:model ContactForm -m

migrationファイルで、テーブルデータを作成

型、カラム名、文字制限、カラムオプションを指定

カラム修飾子(オプション)とは カラム指定の際に、カラムにオプションを指定できる。 例えば、nullを許容したい場合のオプションは、->nullable();


テーブル作成を実行

php artisan migrate
2024_03_16_095612_create_contact_forms_table .......................................... 198ms DONE


テーブルを作成してくれた。

table-create-0316

Eloquentとクエリビルダ(Laravel)

■共通点
SQLを書かずに、簡潔なコードでDBアクセスできる
・PDO_parameter_bindingを使用する為、SQLインジェクションよる危険性が減る


①Eloquent
・LaravelのORM
・モデルクラスを使用
・自動的なマッピングが可能
・リレーションシップ(テーブル間の関連付け)をサポート 
・戻り値はモデルオブジェクト


②クエリビルダ
・メソッドチェーンでDBクエリを構築
・自動的なマッピングではなく、明示的にカラム名を指定する必要がある
・リレーションシップを扱うためには、追加のクエリを書く必要がある
・戻り値はコレクション

 

 

■どう使い分ける?
・クエリビルダを使うパターン
基本DB操作や、シンプルなクエリ操作はクエリビルダを推奨。
メソッドチェーンで柔軟に条件などを操作できる。

・Eloquentを使うパターン
モデル間の関連付けや、複雑なクエリを扱う場合はEloquentを推奨。
クエリビルダにはない特徴がある。