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

Php Laravel:使用路由/模型绑定时访问表单请求中的模型实例,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在我的项目中为我的一个模型设置了一些路由/模型绑定,效果很好。我能够在路由路径中使用绑定,并接受模型的实例作为控制器中相关方法的参数 现在我正在尝试使用这个模型做一些工作,所以我在我的控制器中创建了一个接受表单请求的方法,这样我就可以执行一些验证 public function edit(EditBrandRequest $request, Brand $brand) { // ... 我的模型的每个不同实例都可以进行不同的验证,因此我需要能够使用模型的一个实例来构建一组自定义的验证

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

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

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);
'address' => 'required|unique:addresses,address,' . $this->route('address')->id,
在这两种情况下,我都得到了模型的空/新实例,而不是我期望的实例

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


谢谢

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

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

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

class EditBrandRequest extends Request
{
    // ...

    public function rules(Brand $brand)
    {
        dd($brand);
'address' => 'required|unique:addresses,address,' . $this->route('address')->id,

传奇-完美的作品!就这么简单。谢谢从第4版开始使用Laravel,不知道它这么简单-谢谢!你能详细说明一下$router->model函数放在哪里吗?@Eamon你可以把那一行放在
routes/*.php
中,但是注册绑定的正确方法是
RouteServiceProvider.php
boot
方法,例如
Route::model('user',App\user::class)
Route::bind('username',函数($username){return User::where('username','=',$username)->firstOrFail();});
-请参阅: