claudye / laravel-hooks
此包最新版本(v1.0.0)没有可用的许可证信息。
Laravel trait 用于在方法调用前后挂钩
v1.0.0
2024-09-20 10:53 UTC
Requires
- laravel/framework: >=7.0 <12.0
README
Laravel Hooks
是一个 Laravel trait,允许您在 Laravel 控制器中注册在调用指定方法前后执行的挂钩(回调)。这有助于在不改变其核心逻辑的情况下修改或扩展方法的行为。
1. 功能和用法
主要功能
- 前后挂钩:轻松注册在特定控制器(操作)方法前后执行的回调。
- 非侵入式方法修改:在不接触核心代码的情况下扩展或修改方法的行为。
- 自动挂钩设置:通过使用预定义的
useHooks
方法自动使用挂钩。
使用案例
- 日志记录:在执行某些方法前后自动记录操作。
- 数据验证:在执行关键方法之前添加复杂的验证逻辑。
- 响应转换:在调用方法后修改或格式化方法的返回值。
- 控制器实例修改:在执行方法之前修改控制器实例,这对于结合依赖注入非常有用。
- 横切关注点:在不重复代码的情况下将逻辑应用于多个方法,如审计或授权。
2. 安装
您可以通过 Composer 安装此包。确保您的 Laravel 版本是 7.x 或更高版本(支持至 11.x)。
运行以下命令安装包
composer require claudye/laravel-hooks
3. 使用示例
以下是如何在您的 Laravel 控制器或类中使用 HasControllerHooks
trait 的示例
namespace App\Http\Controllers; use LaravelHooks\Traits\HasControllerHooks; use Illuminate\Http\Request; class ExampleController extends Controller { use HasControllerHooks; public function index(Request $request) { // Your logic here. return [ "users" => $this->queryBuilder->all() ]; } public function show(Request $request) { // Your logic here. return [ "user" => $user ]; } /** * Defines hooks for methods in the controller. */ public function useHooks() { // Register a before hook for the 'index' method $this->beforeCalling(['index', 'show'], function ($request,...$parameters, $method) { $this->queryBuilder->filters($request->all()); logger('Before calling index method'); }); // Register an after hook for the 'index' method $this->afterCalling(['index',"show","edit"], function ($request, $result,...$parameters, $method) { // Modify the result after the 'index' method is called logger('After calling index method'); event(new SomeEvent($result)) return response()->json([ 'data'=>$result ]); }); // You can add other hooks as necessary. } }
高级用法
1. 在方法执行前修改控制器实例
您可以在执行方法之前修改控制器实例本身,这在与 依赖注入 一起工作时特别有用。
示例
$this->beforeCalling(['store',"update","delete"], function ($parameter1, $parameter2,...$methodName) { // Modify the controller instance before executing 'store' method $this->someService = app(SomeService::class)->init(); $parameter1->modify(); });
错误处理
如果在尝试通过 callAction
方法调用不存在的方法时抛出异常,将抛出 BadMethodCallException
,在开发过程中提供更多清晰度。
4. 要求
- Laravel 7.x 至 11.x
5. 许可证
此包是开源软件,根据 MIT 许可证 许可。