Laravel 5.4 与资源的隐式路由模型绑定 returns 空对象
Laravel 5.4 implicit route model binding with resource returns empty object
我在 laravel 的路由模型绑定方面遇到了一个非常奇怪的问题。
使用路由资源:
Route::resource('vendors', 'VendorController');
条目编辑路径如下:
GET|HEAD | admin/vendors/{vendor}/edit | vendors.edit | App\Http\Controllers\VendorController@edit | web,auth.admin
所以根据我对隐式路由模型绑定的理解,供应商属性应该允许直接访问对象。
在我的 Controller 函数中,我可以毫无问题地获取实际 ID。但是当我尝试获取供应商对象时,结果是空的。没有 404,只是一个空结果,使模板失败 "Undefined variable: vendor".
public function edit(Vendor $vendor)
{
dd($vendor);
return view('admin.vendor.edit', compact($vendor));
}
任何人都可以指出正确的方向吗?
更新:出于某种原因,路由模型绑定现在可以正常工作。但是模板仍然会报错,提示vendor is undefined。
@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
我想是因为{vendor}是vendor对象的ID。
我相信您必须使用该 ID 来获取该对象。
像这样:
Vendor::find($vendor);
更改此行:
return view('admin.vendor.edit', compact($vendor));
对此:
return view('admin.vendor.edit', compact('vendor'));
作为压缩数组的替代方法,您可以:
public function edit(Vendor $vendor)
{
return view('admin.vendor.edit')->withVendor($vendor);
}
我在 laravel 的路由模型绑定方面遇到了一个非常奇怪的问题。
使用路由资源:
Route::resource('vendors', 'VendorController');
条目编辑路径如下:
GET|HEAD | admin/vendors/{vendor}/edit | vendors.edit | App\Http\Controllers\VendorController@edit | web,auth.admin
所以根据我对隐式路由模型绑定的理解,供应商属性应该允许直接访问对象。
在我的 Controller 函数中,我可以毫无问题地获取实际 ID。但是当我尝试获取供应商对象时,结果是空的。没有 404,只是一个空结果,使模板失败 "Undefined variable: vendor".
public function edit(Vendor $vendor)
{
dd($vendor);
return view('admin.vendor.edit', compact($vendor));
}
任何人都可以指出正确的方向吗?
更新:出于某种原因,路由模型绑定现在可以正常工作。但是模板仍然会报错,提示vendor is undefined。
@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
我想是因为{vendor}是vendor对象的ID。
我相信您必须使用该 ID 来获取该对象。
像这样:
Vendor::find($vendor);
更改此行:
return view('admin.vendor.edit', compact($vendor));
对此:
return view('admin.vendor.edit', compact('vendor'));
作为压缩数组的替代方法,您可以:
public function edit(Vendor $vendor)
{
return view('admin.vendor.edit')->withVendor($vendor);
}