2016-11-30 3 views
1

У меня есть два маршрута, в которых один принимает аргумент, а другой - это просто URL-адрес, который должен направляться в форму, где может быть создан новый Пользователь. Однако, когда я перехожу к/users/create, кажется, что моя функция getUser получает запрос get и отправляет меня на мой user.blade.php вместо моего createUser.blade.php.Маршрутизация конфликта Laravel

Route::get('/users/{id}', "[email protected]"); 
Route::get('/users/create', "[email protected]"); 

Мои методы в UserController являются:

public function createUser(){ 
    //TODO: Handle user creation. 
    return view('createUser'); 
    } 

    public function getUser($id){ 
    $user = User::find($id); 

    return view('userdetails', compact('user')); 

    } 

ответ

2

А лучше и намного безопаснее подход к обработке это

Route::get('/users/{id}', '[email protected]')->where(['id' => '[0-9]+']); 
Route::get('/users/create', '[email protected]'); 

В where() пытается соответствовать id поля с определенным регулярного выражения/регулярным выражением. В этом случае [0-9] означает любое целое число между 0-9 и + указывает несколько раз :)

+0

Прекрасно, это сработало отлично. Просто изменилось регулярное выражение для соответствия любому положительному целому числу. Спасибо. –

3

Изменить порядок их

Route::get('/users/create', "[email protected]"); 
Route::get('/users/{id}', "[email protected]"); 

Laravel будет пытаться соответствовать маршруты сверху вниз, и поэтому вы хотите, те, которые являются переменными при аналогичных сопоставимых.

+0

Это также работает. Спасибо за ваш совет. –

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