plank / laravel-hush
Laravel 框架中无事件方法的针对性版本。
Requires
- php: ^8.1
- illuminate/contracts: ^10|^11
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
This package is auto-updated.
Last update: 2024-09-17 09:33:38 UTC
README
Laravel Hush
laravel-hush 是一个 Laravel 包,允许您在执行传入的闭包期间禁用模型事件观察器和处理器。它是一个更针对性的版本,Laravel 内置的 withoutEvents()
方法。
目录
安装
您可以通过 composer 安装此包
composer require plank/laravel-hush
用法
该包包含一个特质:HushesHandlers
要在一个模型上启用此功能,只需将其包含在该模型中。
它实现了四个方法
withoutObserver(string $observer, Closure $callback)
此方法将在回调执行期间禁用提供的类中所有模型可观察事件的处理器。
例如,假设 User
使用 HushesHandlers
。在这个例子中,在回调执行期间,不会调用整个 UserObserver
类中的任何处理器,对于任何可观察事件。
User::withoutObserver(UserObserver::class, function () { User::create(['name' => 'John Doe']); });
withoutObservers(array $observers, Closure $callback)
此方法与 withoutObserver()
相同,但允许您传入一个观察者类数组来禁用。
例如
User::withoutObservers([UserObserver::class, ExpirableObserver::class], function () { User::create(['name' => 'John Doe']); });
withoutHandler(string $event, Closure $callback, array $classes = [])
此方法将在回调执行期间禁用提供的事件的处理器。
如果没有提供类,它将禁用该事件的全部处理器。
当提供类时(包括静态添加处理器的类),它将仅禁用来自提供类的已注册处理器。
在以下示例中,所有 created
事件处理器将被禁用,但如果注册了 creating
处理器,则这些事件处理器仍然会运行。
User::withoutHandler('created', function () { User::create(['name' => 'John Doe']); });
在以下示例中,将禁用 User
模型中定义的所有 created
事件处理器,但如果在 UserObserver
类(或任何其他地方)中有一个 created
处理器,则它仍然会处理该事件。
User::withoutHandler('created', function () { User::create(['name' => 'John Doe']); }, [User::class]);
withoutHandlers(array $events, Closure $callback, array $classes = [])
此方法与 withoutHandler()
相同,但允许您传入一个事件数组来禁用处理器。
致谢
许可
MIT 许可证 (MIT)。请参阅许可文件以获取更多信息。
安全漏洞
如果您在 siren 中发现安全漏洞,请发送电子邮件至 security@plankdesign.com。所有安全漏洞都将得到及时处理。
查看我们!
Plank 致力于提供有影响力的解决方案,为客户及其用户提供引人入胜的体验。我们致力于数字空间的创新、包容性和可持续性。了解更多关于我们改善网络使命的信息。