LoginSignup
2
2

More than 3 years have passed since last update.

Laravelで前処理、後処理を実装する

Last updated at Posted at 2020-05-10

目次

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作成

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作成

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作成

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作成

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,
を追加

Kernel.php

‥‥

    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ファイル作成

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を見ると前処理、後処理が実行されていることが確認できました

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2