見出し画像

#77 Laravel アウトプット

こんばんは、hiroです😃

本日も早速アウトプットを始めていきたいと思います!


コントローラー

<基本のコントローラー>
App\Http\Controllers\Controllerを拡張する。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\User;

class UserController extends Controller
{
    /**
      * 指定ユーザーのプロファイルを表示
      *
      * @param  int  $id
      * @return  \Illuminate\View\View
      * /
     public function show($id)
        {
            return view('user.profile', [
                'user' => User::findOrFall($id)
            ]);
        }
    }
}

コントローラメソッドのルートは、次の様に定義
受信リクエストが指定したルートURIに一致すると、App\Http\Controllers\UserControllerクラスのshowメソッドが呼び出され、ルートパラメータがメソッドに渡される。

use App\Http\Controllers\UserController;

Route::get('/user/{id}', [UserController::class, 'show']);


<シングルアクションコントローラー>
コントローラクラス全体をその単一のアクション専用にするのが便利。
利用するには、コントローラ内で単一の__invokeメソッドを定義。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers;\Controller;
use App\Models\User;

class ProvisionServer extends Controller
{
    /**
    * 新しいWebサーバをプロビジョニング
    *
    * @return \Illuminate\Http\Response
    */
   public function __invoke()
   {
      処理を記述
   }

}

シングルアクションコントローラーを登録する場合、コントローラ方式を指定する必要はなし。コントローラの名前をルーターに渡すのみ。

use App App\Http\Controllers\ProvisionServer;

Route::post('/server', ProvisionServer::class);


<コントロールミドルウェア>
ルートファイルの中で、コントローラのルートに対して指定。

Route::get('profile', [UserController::class, 'show'])->middleware('auth');

コントローラのコンストラクター内でミドルウェアを指定できると便利な場合もある。コントローラのコンストラクタ内でmiddlewareメソッドを使用。コントローラのアクションにミドルウェアを割り当てる。

calss UserController extends Controller

{
   /**
    * 新しいUserControllerインスタンスの生成
    *
    * @return void
    */
   public function __construct()
   {
       $this->middleware('auth');
       $this->middleware('log')->only('index');
       $this->middleware('subscribed')->except('store');
   }
}

クロージャを使用したミドルウェアの登録も可能。ミドルウェア全体を定義せず、単一のコントローラ用のインラインミドルウェアを便利に定義できる

$this->middleware(function ($request, $next){
    return $next($request);  
})


ん〜、言葉だけだとやっぱりイメージが湧きにくいのが正直な感想ですね!
ハンズオンで手を動かしながら理解の定着が出来る様に進めていきます😃


本日も最後まで読んで頂き、ありがとうございました!🙇‍♂️




いいなと思ったら応援しよう!