目次
Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方
Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています
前処理、後処理をつくる
Laravelで前処理、後処理を行うにはMiddlewareを作成します
$nextの前に書く処理が前処理となります
$nextの後に書く処理が後処理となります
(1) /sample/app/Http/Middleware/GlobalSample.php作成
<?php
namespace App\Http\Middleware;
use Closure;
class GlobalSample
{
public function handle($request, Closure $next)
{
error_log("before GlobalSample\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
$response = $next($request);
error_log("after GlobalSample\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
return $response;
}
}
(2) /sample/app/Http/Middleware/GroupSample1.php作成
<?php
namespace App\Http\Middleware;
use Closure;
class GroupSample1
{
public function handle($request, Closure $next)
{
error_log("before GroupSample1\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
$response = $next($request);
error_log("after GroupSample1\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
return $response;
}
}
(3) /sample/app/Http/Middleware/GroupSample2.php作成
<?php
namespace App\Http\Middleware;
use Closure;
class GroupSample2
{
public function handle($request, Closure $next)
{
error_log("before GroupSample2\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
$response = $next($request);
error_log("after GroupSample2\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
return $response;
}
}
(4) /sample/app/Http/Middleware/RouteSample.php作成
<?php
namespace App\Http\Middleware;
use Closure;
class RouteSample
{
public function handle($request, Closure $next)
{
error_log("before RouteSample\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
$response = $next($request);
error_log("after RouteSample\n", 3, __DIR__ . DIRECTORY_SEPARATOR . "sample.log");
return $response;
}
}
(5) (1)~(4)で作成したMiddlewareを登録します
/sample/app/Http/Kernel.phpを編集して登録します
Kernel.phpに定義されている$middleware配列に
\App\Http\Middleware\GlobalSample::class,
を追加
Kernel.phpに定義されている$middlewareGroups配列に
'groupSample' => [
\App\Http\Middleware\GroupSample1::class,
\App\Http\Middleware\GroupSample2::class,
],
を追加
Kernel.phpに定義されている$routeMiddleware配列に
'routeSample' => \App\Http\Middleware\RouteSample::class,
を追加
‥‥
protected $middleware = [
‥‥
\App\Http\Middleware\GlobalSample::class,
];
protected $middlewareGroups = [
‥‥
'groupSample' => [
\App\Http\Middleware\GroupSample1::class,
\App\Http\Middleware\GroupSample2::class,
],
];
protected $routeMiddleware = [
‥‥
'routeSample' => \App\Http\Middleware\RouteSample::class,
];
‥‥
middleware配列は常に適用される前処理、後処理になります
middlewareGroups配列は複数の前処理、後処理を1つの単位として名前付けします
routeMiddleware配列は1つの前処理、後処理に名前付けします
Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpにbeforeAfterメソッドを追記
public function beforeAfter(Request $request)
{
error_log("SampleController\n", 3, dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . "Middleware" . DIRECTORY_SEPARATOR . "sample.log");
return view('sample.beforeAfter');
}
(2) /sample/routes/web.phpに下記を追記
Route::get('sample/before-after', 'SampleController@beforeAfter')->middleware('groupSample')->middleware('routeSample');
これで先ほど作成したMiddlewareをURLに適用します
'groupSample'、'routeSample'は先ほどKernel.phpで付けた名前です
viewの作成
/sample/resources/views/sample/beforeAfter.blade.phpファイル作成
<html>
<head>
<title>sample</title>
</head>
<body>
<div>SampleController#beforeAfter</div>
</body>
</html>
動作確認
http://localhost/laravelSample/sample/before-after
MiddlewareとControllerでerror_log関数を実行しているので
/sample/app/Http/Middleware/sample.log
というファイルができました
sample.logを見ると前処理、後処理が実行されていることが確認できました