laravel middlewareで共通処理 Laravel
やること
Middlewareを作成する
作成したMiddlewareをKernelに追加する
Middlewareを作成する
今回はすべてのviewで使っているデータを渡すミドルウェアを作ってみる。
$ php artisan make:middleware Views
1
$ php artisan make:middleware Views
app/Http/MiddlewareにViews.phpが作成される。
デフォルトがこれ。
<?php
namespace App¥Http¥Middleware;
use Closure;
class Views
{
    /**
     * Handle an incoming request.
     *
     * @param  ¥Illuminate¥Http¥Request  $request
     * @param  ¥Closure  $next
     * @return mixed
     */
    public function handle($request  Closure $next)
    {
        return $next($request);
    }
}
<?php
 
namespace App¥Http¥Middleware;
 
use Closure;
 
class Views
{
    /**
     * Handle an incoming request.
     *
     * @param  ¥Illuminate¥Http¥Request  $request
     * @param  ¥Closure  $next
     * @return mixed
     */
    public function handle($request  Closure $next)
    {
        return $next($request);
    }
}
handle()にいろいろ追記していく。
View::share()を使って、とりあえずログインユーザ名を渡してみる。
<?php
namespace App¥Http¥Middleware;
use Closure;
class Views
{
    /**
     * Handle an incoming request.
     *
     * @param  ¥Illuminate¥Http¥Request  $request
     * @param  ¥Closure  $next
     * @return mixed
     */
    public function handle($request  Closure $next)
    {
       //ユーザ名をviewに渡す
        ¥View::share( username   ¥Auth::user()->name);
        
        return $next($request);
    }
}
<?php
 
namespace App¥Http¥Middleware;
 
use Closure;
 
class Views
{
    /**
     * Handle an incoming request.
     *
     * @param  ¥Illuminate¥Http¥Request  $request
     * @param  ¥Closure  $next
     * @return mixed
     */
    public function handle($request  Closure $next)
    {
       //ユーザ名をviewに渡す
        ¥View::share( username   ¥Auth::user()->name);
        
        return $next($request);
    }
}
ミドルウェアはこれでOK.
MiddlewareをKernelに追加する
ミドルウェアを作っただけでは呼べないので Kernel.php の $routeMiddleware に追記して呼び出せるようにする。
app/Http/Kernel.php
/**
     * アプリケーションのルートミドルウェアスタック
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
         auth  => ¥App¥Http¥Middleware¥Authenticate::class 
         auth.basic  => ¥Illuminate¥Auth¥Middleware¥AuthenticateWithBasicAuth::class 
         guest  => ¥App¥Http¥Middleware¥RedirectIfAuthenticated::class 
         throttle  => ¥Illuminate¥Routing¥Middleware¥ThrottleRequests::class 
        /**
         * カスタム
         */
        
        //共通のview変数
         views  => ¥App¥Http¥Middleware¥Views::class   // <- new
    ];
/**
     * アプリケーションのルートミドルウェアスタック
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
         auth  => ¥App¥Http¥Middleware¥Authenticate::class 
         auth.basic  => ¥Illuminate¥Auth¥Middleware¥AuthenticateWithBasicAuth::class 
         guest  => ¥App¥Http¥Middleware¥RedirectIfAuthenticated::class 
         throttle  => ¥Illuminate¥Routing¥Middleware¥ThrottleRequests::class 
 
        /**
         * カスタム
         */
        
        //共通のview変数
         views  => ¥App¥Http¥Middleware¥Views::class   // <- new
    ];
コントローラからミドルウェアを呼び出す
ベースコントローラにて middleware(‘views’) を追加する。
<?php
namespace App¥Http¥Controllers;
use Illuminate¥Foundation¥Bus¥DispatchesJobs;
use Illuminate¥Routing¥Controller as BaseController;
use Illuminate¥Foundation¥Validation¥ValidatesRequests;
use Illuminate¥Foundation¥Auth¥Access¥AuthorizesRequests;
class Controller extends BaseController
{
    use AuthorizesRequests  DispatchesJobs  ValidatesRequests;
    public function __construct()
    {
        $this->middleware( auth );
        
        $this->middleware( views );  //<- new
    }
}
<?php
 
namespace App¥Http¥Controllers;
 
use Illuminate¥Foundation¥Bus¥DispatchesJobs;
use Illuminate¥Routing¥Controller as BaseController;
use Illuminate¥Foundation¥Validation¥ValidatesRequests;
use Illuminate¥Foundation¥Auth¥Access¥AuthorizesRequests;
 
class Controller extends BaseController
{
    use AuthorizesRequests  DispatchesJobs  ValidatesRequests;
 
    public function __construct()
    {
        $this->middleware( auth );
        
        $this->middleware( views );  //<- new
    }
}
これでviewの中で {{$username}} が使える。
 
ただ、
この例だとユーザ名しか渡してないし、viewで {{¥Auth::user()->name}} とすれば解決するのであんまり恩恵がない…
動的に変更する必要がある共通項目とかなら真価を発揮できる。
パッと思いつくのはAPIコント
http://tk2-207-13211.vs.sakura.ne.jp/2016/04/815/
テスト
削除OK
削除NG
存在チェックng
存在チェックok
UNIQOK
他リンクOK
search
ソースみて各パターンをテストする
grep input blade.common
grep radio blade.common
grep select blade.common
Event_Controller_test.php
// create
// init
// update
// edit
// destory