2014-10-05 3 views
1

Я пытаюсь дать уникальный URL-адрес для каждого пользователя на моей базе данных вместо mysite.com/profile/1, например:Laravel приоритет маршрутизации

mysite.com/my-cool-user --> [email protected] 
mysite.com/my-other-user --> [email protected] 

Но если это не удается (нет такого entery как my-cool-user) он будет продолжать проверять для других маршрутов.

Возможно ли это?

ответ

0

Да, это не удастся, вместо этого вы можете использовать параметры маршрутизации.

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

Затем в вашем методе контроллера вы добавляете аргумент в метод.

public function userController($userName){ 

// find the user by new username 

User::where('username',$userName)->first(); 

} 

{имя-пользователя} может быть любым именем пользователя, если имя совпадает в базе данных, вы получите профиль пользователя.

В Laravel для маршрутизации заявления, представленного сначала в Routes.php, будут обработаны сначала перед другими, которые ниже этого конкретного утверждения. Поэтому, если у вас есть два одинаковых URL, первый из них всегда будет использоваться.

Документы Routing Parameters.

+0

Но если я ставил это правило первым, разве это не сделает все остальные правила, что я бесполезен? например, у меня есть статический маршрут для/about page ... – Broshi

+0

Получил! просто поместили 'Route :: get ('/{username} ',' userController @ show ');' в конце route.php и он работает ;-) Спасибо! – Broshi

+0

Да, он будет искать пользователя-страницы из базы данных, если он существует, он предоставит вам пользователя, если он не сработает. Вы можете разместить этот маршрут ниже других маршрутов. –

0

Я не знаю, как это сделать, чтобы работать его полностью, но если у вас есть только один маршрут на основе базы данных, можно создать такую ​​связывающую правило:

Route::bind('username', function ($value, $route) { 
    return User::where('name', $value)->first(); 
}); 

и теперь создайте следующий маршрут в конце всех маршрутов:

Route::get('/{username}', ['uses' => '[email protected]']); 

и определить ваше шоу функции:

public function test($username = null) { 

    var_dump($username); 
} 

В приведенном выше вы можете перенаправить на главный URL-адрес, если $username не отображается или отображается 404 страница. Однако он по-прежнему не решает проблему, когда у вас много маршрутов на основе базы данных, и все они имеют один и тот же шаблон без префикса.

Смежные вопросы