2017-09-11 167 views
0

我有這個路線定義不起作用,Laravel路由的模型綁定,如果路由在路由組

Route::get('/posts/show/{post}', '[email protected]'); 

//corresponding controller method 
public function show(Post $post){ 
    //method logic 
} 

這個完美的作品時,路由路線::組的外側。

但是這個失敗;

Route::group(['domain' => '{user}.localhost.com'], function() { 
... 
    Route::get('/posts/show/{post}', '[email protected]'); 
... 
} 

Erro Output;

Argument 1 passed to App\Http\Controllers\PostsController::show() must be an instance of App\Post, string given 

看看發生了什麼被作爲參數傳遞,我修改了PostsController ::秀()以下;

public function show($post){ 
    return $post; 
} 

//it returned the subdomain part of the url. 

我可以放心地說,路線組正在按預期工作,因爲我有其他路線,他們的工作。 (只要他們不使用路線模型綁定的c)

我發現其他2個職位,解決同一問題,但他們沒有幫助我與此。

+0

'公共功能顯示($用戶,郵政$ POST){'? – milo526

+0

您正在捕獲兩個參數(用大括號包裹),但僅爲一個參數騰出空間。 – Devon

+0

是的!有效。 1個問題,爲什麼?順便說一句,謝謝 – QnARails

回答

2

您已經創建,它接受一個參數,它是{user}和路線組內您接受另一個參數,如果你想在適當的順序使用路由模型結合,安排其參數是{post}一個子域通配符路線。例如$user$post

所以你的控制器看起來應該像

public function show($user,Post $post){ 
    //method logic 
} 
+0

非常感謝你,現在它就像一個魅力一樣。 – QnARails

+0

歡迎您:)。 –