Laravel 5.4隐式路由模型与资源绑定返回空对象

时间:2017-03-06 18:49:08

标签: php laravel laravel-5.4

我在laravel的路由模型绑定方面遇到了一个非常奇怪的问题。

使用路线资源:

Route::resource('vendors', 'VendorController');

编辑条目的路线如下:

GET|HEAD | admin/vendors/{vendor}/edit | vendors.edit | App\Http\Controllers\VendorController@edit | web,auth.admin

因此,根据我对隐式路由模型绑定的理解,vendor属性应该允许直接访问对象。

在我的控制器功能中,我可以毫无问题地获得实际的ID。但是当我尝试获取供应商对象时,结果是空的。没有404,但只是一个空结果,使模板失败并显示“Undefined variable:vendor”。

public function edit(Vendor $vendor)
{
    dd($vendor);
    return view('admin.vendor.edit', compact($vendor));
}

有人能指出我正确的方向吗?

更新:由于某种原因,路由模型绑定现在正在运行。但是,模板仍然会抛出错误,称供应商未定义。

@extends('admin.layout')

@section('content')

{!! Form::model($vendor, ['method' => 'PATCH', 'url' => 'admin/vendors'.$vendor->id]) !!}
    @include ('admin.vendor._form', ["submitButtonText" => "Änderungen speichern"])
{!! Form::close() !!}

@include ('_errors')

@endsection

3 个答案:

答案 0 :(得分:1)

更改此行:

return view('admin.vendor.edit', compact($vendor));

到此:

return view('admin.vendor.edit', compact('vendor'));

答案 1 :(得分:0)

我相信它是因为{vendor}是供应商对象的ID。

您必须使用我认为的ID来获取该对象。

这样的事情:

Vendor::find($vendor);

答案 2 :(得分:0)

作为压缩数组的替代方法,您可以:

public function edit(Vendor $vendor)
{
   return view('admin.vendor.edit')->withVendor($vendor);
}