Laravel 3.x Ошибка маршрута: страница не найдена даже с установленным маршрутом
У меня раздражающая проблема с маршрутом для раздела CMS, который я разрабатываю. Я получил маршруты для всех разделов, "продуктов", например:
Route::get('admin/products', array('as' => 'admin/products', 'uses'=> 'admin.products@index'));
Route::get('admin/products/create', array('as' => 'admin/products/create', 'uses'=> 'admin.products@create'));
Route::get('admin/products/edit/(:num)', array('as' => 'admin/products/edit', 'uses'=> 'admin.products@edit'));
Route::get('admin/products/delete/(:num)', array('as' => 'admin/products/delete', 'uses'=> 'admin.products@delete'));
.. и связанные файлы, такие как контроллер продуктов, модель продукта и представления.
Все было хорошо, пока я не решил создать новый раздел "Пользователи". Я использовал тот же подход, что и "продукты", создавая маршруты и другие файлы. На самом деле я просто скопировал и вставил файлы, внося изменения по мере необходимости - довольно просто. Получив доступ к "admin / users" и "admin / users / create", он работает как положено. Но я не могу получить доступ к "/users/edit/1" и "/users/delete/1". Я думал, что это будет проблема с маршрутом, но когда я протестировал файл маршрута, я получил 404 еще до того, как достиг маршрут. Вот пример:
Route::get('admin/users/edit/(:num)', function()
{
return "Holy Hell.";
});
"Святой ад" никогда не печатается на экране.
Вот конфиг для "пользователей":
Route::get('admin/users', array('as' => 'admin/users', 'uses'=> 'admin.users@index'));
Route::get('admin/users/edit/(:num)', array('as' => 'admin/users/edit/', 'uses'=> 'admin.users@edit'));
Route::get('admin/users/create', array('as' => 'admin/users/create', 'uses'=> 'admin.users@create'));
Route::get('admin/users/delete/(:num)', array('as' => 'admin/users/delete', 'uses'=> 'admin.users@delete'));
Вещи, которые я заметил / проверил:
- Индексное представление, где находится список пользователей, получило функцию "URL::to_route('admin/users/edit')". У меня нет ошибок на экране, поэтому Laravel понимает, что маршрут 'admin / users / edit' установлен правильно.
- Я знаю, что это не общая проблема, потому что у методов "edit" и "delete" для других разделов CMS нет проблем.
- Взгляды на эти методы есть. Так что это не проблема "файл не найден".
Интересно, я что-то упускаю здесь действительно очевидное? Есть идеи? Если нет, кто-нибудь, пожалуйста, скажите мне, как отладить это?
Большое спасибо.
1 ответ
РЕДАКТИРОВАТЬ: Heads Up
Ваши маршруты в плохом порядке. Поменять их местами Маршруты оцениваются сверху вниз, поэтому все, что admin/products
в маршруте будет маршрут к admin.products@index
и ничего больше.
В вашем edit
метод, вам нужно иметь id
параметр определен.
Так как вы не разместили свой контроллер, я предполагаю, что это потому, что закрытие не имеет $id
перешел на это. Пример:
// Required user id:
Route::get('admin/users/edit/(:num)', function($id)
{
return "Holy Hell.";
});
// Optional user id:
Route::get('admin/users/edit/(:num?)', function($id = null)
{
return "Holy Hell.";
});
В вашем случае вам, вероятно, не понадобится дополнительная часть, если вы не планируете выдать ошибку (или перенаправить на ошибку).