oguz-yilmaz / trammel
为 Laravel 提供独特的异常处理程序
Requires
- php: >=8.0
- laravel/framework: >= 7.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10
This package is auto-updated.
Last update: 2024-09-26 22:26:50 UTC
README
关于 Trammel
处理异常对所有类型的应用程序至关重要。正确并标准化可以提高应用程序的质量,使其易于推理。在 Laravel 中,你可以应用的配置不多,并且只有一个地方可以构建所有异常,那就是 Handler.php
。由于需要自定义异常处理,该文件很快就会变得相当丑陋,到处都是 if-else 语句。这个库提供了默认的异常处理和不同类型异常的标准输出格式(验证异常
、Ajax 或 Json 异常
或 组合
),以及为每种类型提供不同的处理程序,您可以在其中扩展和自定义。
安装
composer require oguz-yilmaz/trammel
版本兼容性
异常处理程序类型和默认输出格式
Trammel 为大多数情况提供了通用处理程序。每个处理程序都提供可扩展的通用输出格式。下面列出它们所指的内容以及它们作为响应格式提供的内容。
用法
默认输出格式
如果您想使用默认输出格式,您可以直接在 app/Exception
文件夹中使用 Trammel 的 BaseHandler
类扩展 Handler
类。
// app/Exception/Handler.php use Oguz\Trammel\Exception\BaseHandler; class Handler extends BaseHandler { // if class has render method, remove it }
自定义处理程序
如果您不想使用处理程序的默认行为,您可以扩展它。首先,在 app/Exception
下创建一个新的文件夹名为 Handlers
,以保存我们的自定义异常处理程序。这将使其更加整洁和干净。
<?php namespace App\Exceptions\Handlers; use Symfony\Component\HttpFoundation\Response; use Oguz\Trammel\Handlers\AjaxHandler; use Illuminate\Http\Request; use Throwable; class CustomAjaxHandler extends AjaxHandler { protected function handle(Request $request, Throwable $exception): Response { return response()->json([ 'success' => true ]); } }
然后,您需要将这些自定义异常处理程序添加到来自 Oguz\Trammel\Exception\BaseHandler
类的 App\Exception\Handler
类的 $handlers
属性中。
namespace App\Exceptions; use App\Exceptions\Handlers\CustomAjaxHandler; use Oguz\Trammel\Exception\BaseHandler; class Handler extends BaseHandler { protected array $handlers = [ CustomAjaxHandler::class ]; //... }
这些异常将如何触发
所以我们有不同类型的处理程序来处理不同类型的异常。但是,我们什么时候会得到这些类型的异常呢?下面是一个示例控制器,它将让您了解在哪种情况下会抛出哪种异常类型。
<?php namespace App\Http\Controllers; use Illuminate\Validation\ValidationException; use Illuminate\Http\Request; use Exception; class IndexController extends Controller { // $request->isJson() === false && $request->ajax() === false public function index() { throw new Exception('Generic exception that will be passed to Laravel'); } // $request->isJson() === false && $request->ajax() === false public function validation(Request $request) { throw ValidationException::withMessages(['message' => 'Validation Exception']); } // $request->ajax() === true public function ajax(Request $request) { throw new Exception('AJAX Exception'); } // $request->isJson() === true public function json(Request $request) { throw new Exception('JSON Exception'); } // $request->ajax() === true public function ajaxValidation(Request $request) { throw ValidationException::withMessages(['message' => 'AJAX Validation Exception']); } // $request->isJson() === true public function jsonValidation(Request $request) { throw ValidationException::withMessages(['message' => 'JSON Validation Exception']); } }
有关每种异常类型的详细信息,请参阅上面。