Laravel:使用路由/模型绑定时在表单请求中访问模型实例

     2023-03-15     61

关键词:

【中文标题】Laravel:使用路由/模型绑定时在表单请求中访问模型实例【英文标题】:Laravel: Access Model instance in Form Request when using Route/Model binding 【发布时间】:2016-09-17 18:17:04 【问题描述】:

我在我的项目中为我的一个模型设置了一些路由/模型绑定,并且效果很好。我可以在我的路由路径中使用我的绑定,并接受我的模型实例作为我控制器中相关方法的参数。

现在我正在尝试使用这个模型做一些工作,所以我在我的控制器中创建了一个接受表单请求的方法,以便我可以进行一些验证。

public function edit(EditBrandRequest $request, Brand $brand)

    // ...

我的模型的每个不同实例都可以进行不同的验证,因此我需要能够使用模型的一个实例来构建一组自定义的验证规则。

有没有办法获取模型的实例,即从表单请求注入到控制器中?

我已经尝试在表单请求的构造函数中对模型实例进行类型提示

class EditBrandRequest extends Request

    public function __construct(Brand $brand)
    
        dd($brand);
    

我还尝试在表单请求的 rules() 方法中对模型实例进行类型提示。

class EditBrandRequest extends Request

    // ...

    public function rules(Brand $brand)
    
        dd($brand);

在这两种情况下,我都提供了模型的空/新实例,而不是我期望的实例。

当然,我总是可以通过不打扰表单请求来解决这个问题,只需在控制器中生成规则并手动验证 - 但如果可能的话,我宁愿使用 Laravel 方式

谢谢

【问题讨论】:

【参考方案1】:

您可以使用绑定键简单地访问它,例如,如果您绑定Brand 模型:$router->model('brand', '\App\Brand'),您可以使用$this->brand 获取模型实例。以下是验证规则示例:

'slug' => 'required|unique:brand,slug,' . $this->brand->id,

编辑

有时你可能有一个输入名称与绑定键使用相同的名称,例如,如果你将Address 模型绑定为address,那么你有一个输入字段address,这会使 Laravel 混淆。这种情况可以使用route()方法。

'address' => 'required|unique:addresses,address,' . $this->route('address')->id,

【讨论】:

传奇 - 完美运行!就那么简单。谢谢! 从第 4 版开始使用 Laravel,没想到这么简单——谢谢! 能否请您详细说明 $router->model 函数的放置位置? @Eamon 您可以将该行放入routes/*.php,但注册绑定的正确方法是在RouteServiceProvider.phpboot 方法中,例如Route::model('user', App\User::class)Route::bind('username', function ($username) return User::where('username', '=', $username)->firstOrFail(); ); - 请参阅: laravel.com/docs/5.6/routing#route-model-binding 如何使这种方法在单元测试模式下工作?

Laravel 5.0 路由模型绑定在销毁操作中不起作用

】Laravel5.0路由模型绑定在销毁操作中不起作用【英文标题】:Laravel5.0RouteModelBindingdidn\'tworkindestroyaction【发布时间】:2016-05-1117:33:37【问题描述】:我有一个带有一个提交按钮的表单,并将操作设置为销毁控制器中的方法。相同... 查看详情

Laravel 5 表单模型绑定复选框值

】Laravel5表单模型绑定复选框值【英文标题】:Laravel5FormModelBindingCheckboxValues【发布时间】:2016-12-1311:45:27【问题描述】:我在表单中使用复选框,由于某些原因,我无法存储复选框状态(选中或未选中)的值。我正在使用表单... 查看详情

Laravel - 使用 json 字段自定义路由模型绑定中的键

】Laravel-使用json字段自定义路由模型绑定中的键【英文标题】:Laravel-Customizethekeyintheroutemodelbindingwithjsonfield【发布时间】:2022-01-2112:59:08【问题描述】:我想自定义路由模型绑定中的键,我做了这样的事情-useApp\\Models\\Post;Route::... 查看详情

Laravel 路由模型绑定 - Laravel 5.7

】Laravel路由模型绑定-Laravel5.7【英文标题】:LaravelRouteModelBinding-Laravel5.7【发布时间】:2021-05-2423:34:24【问题描述】:我正在尝试使用Laravel的路由模型绑定。我在RoutesServiceProvider中设置了一个绑定来执行一些自定义解析逻辑。这... 查看详情

Laravel:重复字段(和字段组):表单模型绑定

】Laravel:重复字段(和字段组):表单模型绑定【英文标题】:Laravel:RepeatingFields(andFieldGroups):FormModelBinding【发布时间】:2015-06-0711:37:53【问题描述】:我正在Laravel中构建一个表单,它以可重复实体的形式处理数组字段(无论... 查看详情

Laravel 路由绑定模型未定义偏移量:9

】Laravel路由绑定模型未定义偏移量:9【英文标题】:LaravelRouteBindingModelUndefinedoffset:9【发布时间】:2018-06-1219:47:07【问题描述】:我正在使用laravel5.2。我有一个名为Book的模型,然后尝试将路由绑定模型从我的控制器移动到RouteS... 查看详情

Laravel 5.2 使用 uuid 字符串作为 id 的隐式路由模型绑定

】Laravel5.2使用uuid字符串作为id的隐式路由模型绑定【英文标题】:Laravel5.2implicitroutemodelbindingusinguuidstringasid【发布时间】:2016-07-0510:21:40【问题描述】:我正在设置一个新的laravel安装,并且在使用uuid作为id时遇到了隐式路由模... 查看详情

使用 Laravel 模型绑定模拟控制器测试

】使用Laravel模型绑定模拟控制器测试【英文标题】:MockingincontrollertestswithLaravelmodelbinding【发布时间】:2014-06-3018:52:26【问题描述】:我在我的路由中使用模型绑定将模型传递给我的控制器操作,并希望能够编写测试。如果测试... 查看详情

使用 Laravel 表单模型绑定和复选框更新多对多 Eloquent 关系

】使用Laravel表单模型绑定和复选框更新多对多Eloquent关系【英文标题】:Many-to-ManyEloquentrelationshipupdatewithLaravelFormModelBinding&Checkboxes【发布时间】:2013-12-0909:02:00【问题描述】:我有3张桌子:门身份证姓名图片颜色身份证姓名... 查看详情

laravel 表单模型绑定 - 日期格式

】laravel表单模型绑定-日期格式【英文标题】:laravelformmodelbinding-dateformatting【发布时间】:2014-07-0411:34:57【问题描述】:我有Laravel。我有一个表格。我有一个MySQL数据库。里面有一些日期。当我绑定模型和表单时,表单会忠实... 查看详情

Laravel 表单模型绑定

】Laravel表单模型绑定【英文标题】:Laravelformmodelbinding【发布时间】:2013-05-2805:46:02【问题描述】:我一直在阅读有关此功能的信息:http://laravel.com/docs/html#form-model-binding它看起来很整洁,但有几件事我不确定。我是否需要在控... 查看详情

如何在 PHP Laravel 8 中使用模型绑定重命名路由键(不正确的复数)?

】如何在PHPLaravel8中使用模型绑定重命名路由键(不正确的复数)?【英文标题】:HowtorenameroutekeywithmodelbindinginPHPLaravel8(incorrectplurals)?【发布时间】:2021-10-1619:39:09【问题描述】:我有一个Laravel8项目,其中有一个名为FieldOfStudy... 查看详情

laravel路由参数的默认值怎么设置

参考技术A基本路由您的应用程序的绝大多数路由将在app/routes'),function()Route::get('user/id',function($account,$id)//););路由前缀一组路由可以通过在属性数组中使用prefix选项为路由组添加前缀:为路由组添加前缀复制代码代码如... 查看详情

Laravel sanctum 令牌认证在模型绑定之后运行

】Laravelsanctum令牌认证在模型绑定之后运行【英文标题】:Laravelsanctumtokenauthenticationrunsaftermodel-binding【发布时间】:2021-03-1414:14:58【问题描述】:TL;DR:如果承载令牌请求通过路由模型绑定到达端点但令牌不正确,则响应应为401... 查看详情

使用 Laravel Collective、Bootstrap 模型和 JavaScript 的客户端表单验证和路由?

】使用LaravelCollective、Bootstrap模型和JavaScript的客户端表单验证和路由?【英文标题】:ClientSideFormvalidationANDroutingusingLaravelCollective,BootstrapModel,andJavaScript?【发布时间】:2020-07-0202:30:19【问题描述】:我想为我目前正在帮助的一家... 查看详情

laravel 5.2 中的表单模型绑定

】laravel5.2中的表单模型绑定【英文标题】:formmodelbindinginlaravel5.2【发布时间】:2016-08-2518:08:30【问题描述】:我一直在阅读关于表单模型绑定https://laravelcollective.com/docs/5.0/html#form-model-binding以html形式填充DB值非常酷。我试过这... 查看详情

Laravel 路由模型绑定动态错误信息

】Laravel路由模型绑定动态错误信息【英文标题】:LaravelRouteModelBindingDynamicErrorMessage【发布时间】:2020-12-2014:26:11【问题描述】:给定/routes/api.php这样的文件//ArticleRoute::get(\'article/article\',\'ArticleController@retrieve\');//CategoryRoute::get(\... 查看详情

Blade 视图组件的 Laravel 路由模型绑定

】Blade视图组件的Laravel路由模型绑定【英文标题】:LaravelroutemodelbindingforBladeviewcomponent【发布时间】:2021-03-2222:01:15【问题描述】:在我的服务提供者中,我在路由中绑定了事件模型。Route::model(\'event\',Event::class);然后我创建以... 查看详情