2013-12-18 21 views
0

我想undestrtand如何設置我的路線上最好的方式沒有得到collission在未來。Laravel 4使用用戶名在第一段的路線

我想有一個像第一段示出該用戶的配置文件的用戶的用戶名。

例子:laravel.dev/user1

的問題是,如果我有名稱的路徑登記「下面的例子」,並把像當然用戶名註冊用戶發生一個collission是沒把握至極顯示視圖。

Route::get('register','[email protected]'); 

設置我的顯示器主要道路輪廓用戶像這樣:

Route::get('{cr_user}','[email protected]'); // view profile 

    Route::bind('cr_user', function($value, $route) { 
    if($user = User::where('username', '=',$value)->first()) // check if exist the user other ways show 404 page 
    { 
     return $user; 
    } 
    App::abort(404); 
}); 

路線的該設置的第二個問題是,我不能設置其他航線只有1段。例如,如果我想設置路由寄存器,我不能做到這一點,但之前沒有放置任何段,但爲了做到這一點,我必須把例子:do/register。

有幫助嗎?

回答

1

以下是我認爲你可以達到預期效果的方法。雖然這不是充分的證據,但我認爲它會起作用(我還沒有測試過)。也像Anam說的你想把這條路線放在頁面的底部。

基本上,你可以通過以下途徑獲取的名單目前Laravel應用:

<?php 
$routes = Route::getRoutes(); 
foreach ($routes as $r) { 
    $route_names = array(); 
    $firstSegment = explode('/', $r->getPath()); 
    //echo $firstSegment[0] ."<br>"; 
    array_push($route_names, $firstSegment[0]); 
    var_dump($route_names); 
} 
?> 

您現在有一個數組或路線的URL的第一部分。當用戶註冊您的應用程序並在出現匹配時拋出錯誤時,將這些用作保留字。這將防止碰撞。但是,這不會阻止您創建一個用戶名的新路由已經存在那麼添加一個新的路線:)

之前搜索數據庫我敢肯定,有可能有一個很好的解決這個但這是我腦海中浮現出什麼。我不喜歡添加/配置文件/這不夠高雅。