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

2022-08-30 11:30:42

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

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

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,

编辑

有时,您可能有一个与绑定键使用相同名称的输入名称,例如,如果您绑定模型,那么您将有一个输入字段,这将使Laravel感到困惑。对于这种情况,您可以使用方法。Addressaddressaddressroute()

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

答案 2

推荐