2017-03-06 75 views
0

我困在laravel的路由模型綁定的一個非常奇怪的問題上。Laravel 5.4與資源綁定的隱式路由模型返回空對象

使用的路由資源:

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

編輯條目的路線如下:

GET|HEAD | admin/vendors/{vendor}/edit | vendors.edit | App\Http\Controllers\[email protected] | web,auth.admin 
從我隱路線模型的理解結合

因此,供應商屬性應該允許訪問直接對象。

在我的控制器功能,我可以得到沒有問題的實際ID。但是,當我嘗試獲取供應商對象時,結果是空的。沒有404,但只是一個空的結果,使模板失敗,「未定義的變量:供應商」。

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 
+0

我相信這是因爲{vendor}是供應商對象的ID。 您必須使用該ID從數據庫中獲取對象。 – Hanny

+0

如果你沒有輸入提示(即'function edit($ vendor)'),那麼當你用'dd()'的時候你會得到什麼?假設它是ID,當你的Vendor :: find($ vendor)'時,你會得到什麼? – Samsquanch

+0

您是否正確導入App \ Vendor模型到您的控制器中? –

回答

1

改變這一行:

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

這樣:

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

總是看錯了地方。謝謝! – asto

+0

每個路由模型綁定返回空模型請看這裏:https://github.com/laravel/framework/issues/13988 – dparoli

0

我相信這是因爲{vendor}是供應商對象的ID。

你必須使用該ID來獲取該對象,我相信。

事情是這樣的:

Vendor::find($vendor); 
0

作爲替代壓實一個數組,你可以:

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