1
1

Laravel Up & Running 3rd editionの箇条書き抜粋

Last updated at Posted at 2023-12-02

これは何?

この記事は実務でLaravelを使う時にそういえばあんな機能あったなというHookにすることを目的としています
内容を詳細に解説するものではありません

  • O'reilly から出ている Laravelの解説書 Laravel Up & Runningの箇条書き抜粋
  • https://www.amazon.co.jp/Laravel-Running-Framework-Building-Modern-dp-109815326X/dp/109815326X/ref=dp_ob_title_bk
  • Laravelは便利な機能がたくさんあり、いろいろな複雑な処理を宣言的に書けるようになっている。
  • 一方そういった便利機能の存在を知らないと手続き的に車輪の再発明ロジックを書いてしまいコードが冗長になってしまうことが多い
  • 現状邦訳がないため、そのような便利機能を備忘録的にまとめた
  • 備忘録を兼ねた箇条書き抜粋でしかないので、詳細は原書や他の解説書・解説記事を参照してください
  • 問題がありましたら修正または非公開にしますのでご連絡ください
  • 未完成、随時追記していきます
  • 各章に設けられた「テスト」の節は省略しています
  • Laravel 10.x 前提

第2章 Setting Up a Laravel Development Enviroment

Laravelの開発環境を設定する

全てのLaravel Applicationの核となる設定はconfigフォルダに存在する。configフォルダの各ファイルはPHPの配列を返し、ドットで区切られる、ファイル名と後に続くキーを含むconfig keyで値にアクセス可能。

Laravelのいくつかの機能(キャッシュと最適化を含む)はenvヘルパ関数をconfigフォルダ外で使用すると機能しない。

.envファイル
いくつかの重要な設定
APP_KEY string
APP_DEBUG boolean
debugレベルのログを出力するか

第3章 Routing and Controllers

ルーティングとコントローラ

  • 複数method Route::match['get', 'post']
  • 全てのmethod Route::any

Laravelの Controller/Methodを参照する構文

  • tuple syntax
  • string stntax

ルートパラメータの指定方法

  • セグメントパラメータ
  • optionalなセグメントパラメータ
  • 正規表現
  • constraint helpers whereNumber whereAlpha

ルートのマッチ順

  • 記載順にマッチする

ルートパラメタとハンドラメソッド引数の関係

  • ルートパラメタの出現順にハンドラメソッド引数に代入される
  • {appId}/{userId}/login というルートのハンドラに function($userId,$appId){...}
    逆の値が代入される。習慣上名前を揃えたほうがいいが、代入される値と変数名に関係はない(Laravelは順番しか見ない)

ルート名とヘルパ

  • urlヘルパ => pathを渡すとフルのurlを返してくれる
  • 名前付きルート nameヘルパで定義できる
  • route ヘルパで呼び出す
  • ルートとviewの名前はリソース名の複数形.メソッド(action)という名前をつけるのが一般的な習慣
  • (users.get photos.destroy)など
  • routeヘルパにパスパラメータおよびクエリパラメータを引き渡す方法はいくつかある(連想配列または配列)

ルートグループ

ルートグループは共通の機能(prefix, namespace, middleware, etc)を持った複数のルートをまとめる
Route::group

ミドルウェアの適用

  • コントローラ単位でのミドルウェアの適用
    • コントローラのコンストラクタでmiddlewareメソッドを呼ぶことで、コントローラ特有のミドルウェアを適用できる
    • middleware メソッドに onlyexceptをチェインすることでmiddlewareが適用されるメソッドを制限できる

サブドメインルーティング

Route::domain メソッド

名前付きルートグループ

Route::namegroupメソッドをチェーンさせると、グループ内のルート名の接頭語(プレフィックス)になる

Route::name('users.')->prefix('users')->group(function(){
    Route::get('/{id}', function(){
        //...
    })->name('show');
});

users.showが名前付きルートの名前になる

ルートグループコントローラ

以下のようにルートグループ単位で共通のコントローラを設定できる

Route::controller('HogeClass::class')->group(fucntion(){
    Route::get('/', 'index');
    //...
}

署名付きルート

正確なURLを知っている人だけがアクセスできる一種の認証/認可機能
時限付き署名付きルートも作れる

  • 初めに、なんらかの処理を行うルートを設定する
  • 次に URL::signedRouteURL::temporarySignedRouteメソッドを使い署名付きルートのURLを生成しユーザに送る
  • 署名していないアクセスを防止するには 元々のルートにsigned middleware を使うか $request->hasValidSignature メソッドで判定して処理する

ビュー

  • Route::view メソッド
    route定義上でviewを返すRouteを定義できる

コントローラ

  • リソースコントローラ
    php artisan make:controller AbcController --resource
    で標準的なリソース操作メソッドを備えたコントローラのテンプレートを生成してくれる。
    Route::resourceで全てのメソッドをrouteにバインドできる
  • APIリソースコントローラ
    php artisan make:controller AbcController --api
    Route::apiResource でバインド
  • ルートとバインドされたメソッド一覧の表示
    php artisan route:list --exclude-vendorオプションでライブラリから内部的に利用されているルートを除外
  • シングルアクションコントローラ
    1コントローラ1routeにしたい場合に マジックメソッド __invoke に処理内容を記載し、Route::xxxでクラスにバインドできる

ルートモデルバインディング

  • ルートモデルバインディングとは、パスパラメータからモデルを呼び出しコントローラに注入する機能
    • 簡単なやり方(パラメータ名とモデル名を一致させる)
      /conferences/{id}というルートで自動バインディングさせるには
      パラメータ名をモデルに一致させる(id->conference)
      /conferences/{conference}
      あとは、コントローラメソッドで型ヒントを行なうと自動で対象のモデルが注入される
      ({conference}に相当するセグメントがidとして解釈される)
    function (Conference $conference) {
        //...
    }
    
    他にも色々オプションがある(割愛)

ルートキャッシュ(route caching)

  • クロージャで定義されたルートがあるとキャッシュできない
  • php artisan route:cache でキャッシュ
  • php artisan route:clear でクリア

フォームメソッドスプーフィング

  • HTML FORMから GET POST以外のメソッドを使いたい時に使用する
  • bladeのformタグ内で@method('PATCH') などと使用する

CSRFプロテクション

リダイレクト

  • redirect() ヘルパ
    • redirect()
    • redirect()->to()
    • redirect()->route()
    • redirect()->back()
    • Redirect ファサード
  • その他のメソッド
    • refresh()
    • away()
    • secure()
    • guest()
    • intended()
  • 引数の受け渡し
    • with()メソッド
    • withErrors()メソッド
      • バリデータインスタンスをそのまま渡せる
    • old()ヘルパ

リクエストの中止(Abort)

  • abort()
  • abort_if()
  • abort_unless()

カスタムレスポンス

  • response()
    • response()->make()
    • response()->json() ,jsonp()
    • response()->download(), file(), streamDownload()
      • streamDonwload()はクロージャechoでストリームデータを吐き出す関数を引数に取る

第4章 Blade Templating

ブレードテンプレート

  • bladeは.netのRazorエンジンにインスパイアされている
  • 基本構文
    • @ + directive
    • { echoする内容 }

データのecho

  • {{ $variable }}
<?=htmlentities($variable)?>

と同じ

  • {!! $variable !!}
    HTMLエスケープをしないで内容を出力する
  • フロントエンドフレームワークの構文で {{ hoge }}が必要な場合
    blade上では @{{ hoge }} と書けばいい

制御構文

  • @if @else @elseif @endif
  • @unless @endunless
  • @for @foreach @while
  • @forelse @empty @endforelse

テンプレートの承継

  • @section @endsection @yield @show
  • @extends
  • @parent
  • @include
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1