- 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,
];
わたしは、これで、シアワセになりましたが、運用上はおすすめしません。
試験するサイトを別に立てて、デバッグ環境を使い分ける方が安全です。
|