Laravel

Symphonyベースのフルスタックなフレームワーク。

sudo apt install php-mbstring php-xml
composer global require laravel/installer
# $HOME/.composer/vendor/binにパスを通しておくと使えるyo
laravel new example-app

バージョンアップ間隔

間隔Bug fixSecurity fixメモ
メジャーリリース6ヶ月7ヶ月1年Laravel 9以前
1年1年半2年Laravel 9以降
LTS2年2年3年Laravel 6 2021/7/29時点

public/index.phpを起点にリクエストをパスルーティングして処理している。

サービスコンテナ

サービスコンテナの実体 Illuminate\Foundation\Application アプリケーションでよく使われる共通の機能の生成やインスタンスのキャッシュなどのインスタンスの管理をする役割を担う。サービスコンテナが生成やDIへの責任を持つため、利用側は設定や初期化などを気にする必要がなくなる。

hoge

  • バインド
    • サービスコンテナに対してインスタンスの生成方法を登録する処理
    • bind/bindf/singleton/instanceメソッドなどで登録する
    • Providers/AppServiceProviderクラス内などProvidersにバインドを定義する
  • 解決
    • makeメソッドやapp関数を利用することで名前から解決したインスタンスを取得する
    • Class名ならbindされてなくてもインスタンス生成は可能
      • ただのリフレクションやん
    • when/need/giveを利用すると注入先クラスによってサービスコンテナで解決するクラスを変更できる
      • adminだったらこのクラス、userだったらこのクラスみたいに。

ファサード

クラスメソッド形式でフレームワークの機能をかんたんに利用できる。
サービスコンテナをベースに実現されているらしい。
マジックメソッド__callStaticを使ってサービスコンテナで解決したインスタンスのメソッドを呼び、あたかもクラスメソッド形式で読んでいるようにみせている。密ですね。

サービスプロバイダ

ビジネスロジックの実行前にサービスプロバイダーが呼び出される

  • サービスコンテナへのバインド
  • イベントリスナーやミドルウェア、ルーティングの登録
  • 外部コンポーネントの読み込み
    registerメソッド⇛(任意)bootメソッドの順に実行して処理をおこなうよ
    DeferrableProviderを実装するとサービスプロバイダーで呼び出されるまで読み込みを遅延させることができる。

コントラクト

Laravelのコアコンポーネントで利用されている関数をインターフェースで定義したもの。このコントラクトを実装したクラスでコアコンポーネントの差し替え(Providerで再バインド)が可能。

クライアント

ミドルウェア

  • グローバルミドルウェア
    • ルーターに登録されたコントローラの動作前に実行
    • ルート情報を取り扱うような処理はおこなえない
  • ルートミドルウェア
    • ミドルウェアを特定のルートに指定したい場合に利用する
    • Routeのmiddlewareメソッドで指定することができる
    • ミドルウェアグループという形で一括でmiddlewareを指定できる形にもできる

Sail

Laravel sail

LaravelのデフォルトのDocker開発環境を操作するためのCLI。Laravelのアプリケーションを構築するための出発地点を提供するよ。

> composer require --dev laravel/sail
# docker-composeを生成するよ
> php artisan sail:install
Which services would you like to install? [mysql]:
  [0] mysql
  [1] pgsql
  [2] mariadb
  [3] redis
  [4] memcached
  [5] meilisearch
  [6] minio
  [7] mailhog
  [8] selenium
> ./vendor/bin/sail up -d
> alias sail="./vendor/bin/sail"
# コンテナのmysqlに直接アクセスできるコマンドも用意しているよ
> sail mysql

参考

Laravel で DDD のレイヤードアーキテクチャを試す