soyhuce / laravel-model-injection
Laravel 扩展模型注入
2.2.0
2024-03-08 15:00 UTC
Requires
- php: ^8.2
- illuminate/contracts: ^10.0 || ^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.6
- larastan/larastan: ^2.0.1
- nunomaduro/collision: ^7.10 || ^8.0
- orchestra/testbench: ^8.0 || ^9.0
- pestphp/pest: ^2.24
- pestphp/pest-plugin-laravel: ^2.2
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
README
想要更好地控制模型注入?需要在查询数据库之前验证数据?
这里有一个包可以让你做到这一点。
安装
你可以通过 composer 安装此包
composer require soyhuce/laravel-model-injection
用法
隐式绑定
为了验证控制器中用于注入模型的 URL 参数,你可以在其中使用 Soyhuce\ModelInjection\ValidatesImplicitBindings
特性。
然后你需要实现 public function routeBindingRules(): array
方法,该方法将为模型绑定的每个键定义验证 URL 参数的规则。
use Soyhuce\ModelInjection\ValidatesImplicitBinding; class Post extends Model { use ValidatesImplicitBinding; /** * @return array<string, mixed> */ public function routeBindingRules(): array { return [ 'id' => 'integer', 'slug' => ['string', 'min:5'] ]; } }
这将允许你使用以下方式在路由中验证绑定 Post
的参数:
Route::get('posts/{post}', function(Post $post) { //... }); Route::get('posts-by-slug/{post:slug}', function(Post $post) { //... });
如果参数无效,将返回 404 错误。
GET /posts/foo => 404
GET /posts-by-slug/bar => 404
详见 https://laravel.net.cn/docs/routing#implicit-binding
自定义隐式路由绑定错误
你可以自定义此包处理隐式绑定的验证失败的方式。
在服务提供者中,只需调用 InvalidRouteBinding::handleUsing
。
InvalidRouteBinding::handleUsing(function (string $class, string $field): never { Log::error("Invalid binding for $class on $field."); abort(422); });
显式绑定
你可以在服务提供者(例如 RouteServiceProvider
)中使用 \Soyhuce\ModelInjection\BindModels
特性来显式绑定你的模型。
use Soyhuce\ModelInjection\BindModels; class RouteServiceProvider extends ServiceProvider { use BindModels; /** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { parent::boot(); $this->bindModel('user', User::class, 'integer'); // Validates that the parameter is an integer // You can bind a model explicitly on a given column $this->bindModelOn('post', Post::class, ['string', 'min:5'], 'slug'); } }
如果给定的参数无效,将返回 404 错误。
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近的变化信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可证
MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。