Reputation: 197
I'm stuck on a very odd issue with laravel's route model binding.
Using a route resource:
Route::resource('vendors', 'VendorController');
The route for editing an entry is the following:
GET|HEAD | admin/vendors/{vendor}/edit | vendors.edit | App\Http\Controllers\VendorController@edit | web,auth.admin
So from my understanding of implicit route model binding, the vendor attribute should allow accessing the object directly.
In my Controller function I can get the actual id with no problem. But when I try to get the vendor object, the result is empty. No 404, but just an empty result, making the template fail with "Undefined variable: vendor".
public function edit(Vendor $vendor)
{
dd($vendor);
return view('admin.vendor.edit', compact($vendor));
}
Can anybody point me in the right direction?
Update: For some reason the route model binding is now working. However the template still throws an error, saying 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
Upvotes: 0
Views: 1503
Reputation:
As an alternative to compacting an array, you could:
public function edit(Vendor $vendor)
{
return view('admin.vendor.edit')->withVendor($vendor);
}
Upvotes: 0
Reputation: 9171
Change this line:
return view('admin.vendor.edit', compact($vendor));
to this:
return view('admin.vendor.edit', compact('vendor'));
Upvotes: 1
Reputation: 2159
I believe it's because {vendor} is the ID of the vendor object.
You'd have to get that object using that ID I believe.
Something like this:
Vendor::find($vendor);
Upvotes: 0