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.";
});

В вашем случае вам, вероятно, не понадобится дополнительная часть, если вы не планируете выдать ошибку (или перенаправить на ошибку).

Другие вопросы по тегам