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