2014-01-09 161 views
1

我是Laravel的新手,至今真的很享受它。我正在使用L4,並希望獲得一些有關路由的幫助,而我仍然試圖讓自己的頭腦清晰。Laravel 4路由參數

我想URI domain.com/{username} 我能得到domain.com/{user_id}和Laravel查找用戶,但我似乎無法使用用戶名作爲參數。

編輯:

我使用用戶路由

Route::model('user', 'User'); 

一個模型,然後試圖航線

Route::get('/{user}', '[email protected]'); 

還要注意,所有其他航線後的

謝謝提前!

回答

3

嗨,歡迎來到Laravel!

您可以使用此路由註冊。

Route::get('{username}', function($username){ 
    $user = User::whereUsername($username)->fist(); 
    if (! is_null($user)) { 
     return View::make('profile', compact('user')); 
    } 
}); 

...但如果你去mysite.com/blogmysite.com/contact也好,這個網址將由以前的模式拍攝。
其實沒有問題,只需註冊博客/聯繫人/之前的任何路線,就像這樣!

Route::get('blog', function(){ 
    return 'blog page'; 
}); 

Route::get('contact', function(){ 
    return 'contact page'; 
}); 

// To have username in URL discard Route::model call and add this 
Route::get('{username}', function($username){ 
    $user = User::whereUsername($username)->fist(); 
    if (! is_null($user)) { 
     return View::make('profile', compact('user')); 
    } 
}); 
+0

所以沒有辦法只有在URL中的用戶名?當然,這可能只是爲了看起來,但如果其他網站可以做到這一點,爲什麼我們不能? – mrurlwin

+0

當然,有,但沒有與路線模型綁定。我將再次編輯答案 – Andreyco

0

你可以試試這個沒有路線::模型啄

Route::get('user/{username}', function($username) 
{ 

    $user = User::where('username',$username)->first(); 
}) 
->where('name', '[A-Za-z]+'); 
0

更妙的是,你可以使用Route::bind()

Route::bind('user', function($value, $route) 
{ 
    return User::whereUsername($value)->first(); 
}); 

現在,您可以訪問該用戶沒有手動調用它在路線定義:

Route::get('{user}', function(User $user){ 
    if (!is_null($user)) { 
     return View::make('profile', compact('user')); 
    } 
}); 

這將適用於您定義的使用{user}參數的所有路由。