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