sebastiaanluca / laravel-route-model-autobinding
自动将Eloquent模型绑定为路由段使用。
Requires
- php: ^7.3
- laravel/framework: ^7.0|^8.0
Requires (Dev)
- kint-php/kint: ^3.3
- mockery/mockery: ^1.3
- orchestra/testbench: ^5.1|^6.0
- phpunit/phpunit: ^8.5
README
立即在路由中使用模型,无需担心维护任何列表或映射。
中等到大型Laravel应用程序可能拥有大量模型。如果您是路由模型绑定的重度用户,以自动检索并注入控制器中的模型实例,这意味着您必须手动在路由服务提供程序中注册数十或数百个模型。然后您需要为每个新模型、更改或删除的模型执行相同操作,这使得这个实用的功能难以维护且容易忘记。
此包通过为您完成所有繁重工作来解决手动注册每个模型的问题。它读取您的composer.json
PSR-4自动加载部分,并扫描所有模型目录以查找可用的Eloquent模型。然后,它使用您选择的案例类型(见配置大小写)将每个模型显式绑定到路由器作为路由段变量。
示例
删除以下样板代码
public function boot() : void { Route::model('user', \App\Users\User::class); Route::model('order', \App\Orders\Order::class); Route::model('shoppingCart', \App\Carts\Cart::class); Route::model('Item', \App\Item::class); Route::model('Admin', \App\Users\Admin::class); … (repeat dozens of times) }
只需这样做(适用于您应用程序中的任何Eloquent模型)
Route::get('profile/{user}', ShowProfile::class); Route::get('orders/{order}', ShowOrder::class); Route::get('carts/{shoppingCart}', ShowShoppingCart::class); …
目录
要求
- PHP 7.3或更高版本
- Laravel 7.0或更高版本
如何安装
通过Composer
composer require sebastiaanluca/laravel-route-model-autobinding
如何使用
定义模型命名空间
Laravel路由模型自动绑定使用您的composer.json
PSR-4自动加载部分来了解哪些命名空间和路径需要扫描。在任何一个新的Laravel项目中,默认的App\\
命名空间已经就绪,因此对于大多数项目无需额外设置。如果您已注册其他命名空间,如本地模块或(开发)包,它们也将被扫描。
{ "autoload": { "psr-4": { "App\\": "app/", "MyModule\\": "modules/MyModule/", "MyPackage\\": "MyPackage/src/" } } }
此外,它过滤掉特性、抽象类、辅助文件和其他不可用项目,仅绑定有效的Eloquent模型。
路由段变量
安装此包后,您可以直接在路由中使用别名Eloquent模型
Route::get('profile/{user}', ShowProfile::class); Route::get('orders/{order}', ShowOrder::class); Route::get('carts/{shoppingCart}', ShowShoppingCart::class); …
除了为您扫描和别名化模型外,此包不会更改Laravel的任何原生功能。因此,请参阅Laravel文档了解如何使用路由模型注入。
生产中的绑定缓存
为了在生产环境中缓存所有绑定并加速应用程序,请将缓存命令添加到您的部署脚本中。
php artisan autobinding:cache
这将扫描您当前的所有模型并将静态缓存文件写入到 bootstrap/cache
目录。在随后的框架启动过程中,它会读取缓存文件而不是实时扫描和别名。
请注意,这会因此 禁用运行时扫描,意味着新的模型将不会被识别,现有模型的更改也不会反映出来(在开发过程中不是很方便)。但是,您仍然可以在配置文件中更改大小写类型,因为绑定发生在后续阶段。
要清除缓存文件,请运行
php artisan autobinding:clear
配置
运行
php artisan vendor:publish
然后选择
laravel-route-model-autobinding (configuration)
以发布配置文件。
大小写
默认情况下,别名模型的默认大小写类型设置为 驼峰式。您可以将此更改为使用驼峰、蛇或 Studly 大小写。
有关可能的选项,请参阅 \SebastiaanLuca\RouteModelAutobinding\CaseTypes
。
驼峰式(默认)
Route::get('carts/{shoppingCart}', ShowShoppingCart::class);
蛇形
Route::get('carts/{shopping_cart}', ShowShoppingCart::class);
Studly
Route::get('carts/{ShoppingCart}', ShowShoppingCart::class);
即使在缓存了您的模型之后,大小写类型仍然可以更改。
许可协议
本软件包在 MIT 许可协议(MIT)下运行。有关更多信息,请参阅 LICENSE。
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
测试
composer install
composer test
贡献
有关详细信息,请参阅 CONTRIBUTING 和 CODE_OF_CONDUCT。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 hello@sebastiaanluca.com 联系我们,而不是使用问题跟踪器。
致谢
关于
我叫Sebastiaan,是一名专注于构建定制Laravel应用程序的自由职业后端开发人员。查看我的 作品集 了解更多信息,查看我的 博客 了解最新技巧,以及我的其他 软件包 以启动您的下一个项目。
您有一个需要指导的项目吗?请通过电子邮件 hello@sebastiaanluca.com 联系我!