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

Jon*_*hon 22 php laravel laravel-5

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

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

public function edit(EditBrandRequest $request, Brand $brand)
{
    // ...
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试在Form Request的构造函数中对模型实例进行类型提示

class EditBrandRequest extends Request
{
    public function __construct(Brand $brand)
    {
        dd($brand);
    }
Run Code Online (Sandbox Code Playgroud)

我也尝试在Form Request的rules()方法中对模型实例进行类型提示.

class EditBrandRequest extends Request
{
    // ...

    public function rules(Brand $brand)
    {
        dd($brand);
Run Code Online (Sandbox Code Playgroud)

在这两个实例中,我都提供了模型的空/新实例,而不是我期望的实例.

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

谢谢

Rif*_*fki 37

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

'slug' => 'required|unique:brand,slug,' . $this->brand->id,
Run Code Online (Sandbox Code Playgroud)

编辑

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

'address' => 'required|unique:addresses,address,' . $this->route('address')->id,
Run Code Online (Sandbox Code Playgroud)

  • 传奇-完美的作品!就那么简单。谢谢! (2认同)