PHP - Laravel - エラー表示 - 動的に変える

クラウディア 
1. 概要
2. 作成

1. 概要

 前ページで、エラーをブラウザ上に表示したり、コードのみにしたりする設定について記述しましたが。  それがわかると、書いている自分には、詳細なエラーを表示したいし、外部からアクセスしてくる人には、コードだけにしたい・・・と思うのが人情であります。  その方法が検索してもなかなか出てきませんでした。  うすらぼんやり、「APP_DEBUG」の値を変えればいいんだなということはわかるのですが、どうやって、どのタイミングで変えれば実現できるのか、判然としない。  ある「Q&A」サイトで、その疑問を投げたところ、親切な方が詳しく教えてくれました。

2. 作成

 「APP_DEBUG」の値を変えるモジュールを作成します。  ソース名は

app/Http/Middleware/ConfigureUsingIpAddress.php
 とでもしておきます。  いわゆる、ローカルネットワークのアドレスを、「debug」「true」にするとして、下記のようなソースになります。

<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class ConfigureUsingIpAddress
{
    public function handle(Request $request, Closure $next)
    {
        $ranges = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16'];

        config(['app.debug' => $this->ipInRanges((string)$request->ip(), $ranges)]);

        return $next($request);
    }

    protected function ipInRanges(string $ip, array $ranges): bool
    {
    	//	指定のIPアドレスかを判定して
    	//	範囲内であれば「true」
    	//  範囲外であれば「false」を返します

        return false;
    }
}
 作成したモジュールを

app/Http/Kernel.php
 へ組み込みます。  17行目に追加しています。

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\ConfigureUsingIpAddress::class,
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Fruitcake\Cors\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];
 わたしは、これで、シアワセになりましたが、運用上はおすすめしません。  試験するサイトを別に立てて、デバッグ環境を使い分ける方が安全です。
ハイスピードプラン