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

时间:2016-05-20 12:58:59

标签: php laravel laravel-5

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

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

public function edit(EditBrandRequest $request, Brand $brand)
{
    // ...

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

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

我尝试在Form Request的构造函数

中对模型实例进行类型提示
class EditBrandRequest extends Request
{
    public function __construct(Brand $brand)
    {
        dd($brand);
    }

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

class EditBrandRequest extends Request
{
    // ...

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

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

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

由于

1 个答案:

答案 0 :(得分:32)

您可以使用绑定键轻松访问它,例如,如果绑定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,