Frage

I got an annoying problem with a route, for a section of a CMS that I'm developing. I got routes for all the sections, "products", for example:

    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'));

.. and the related files, like the products controller, the product model and the views.

Everything was doing well until I decided to create a new section, "users". I used the same approach as "products", creating the routes and the other files. In fact I just copied and paste the files, making the changes when needed -- pretty straightforward. By accessing "admin/users" and "admin/users/create", it works as expected. But I can't access "/users/edit/1" and "/users/delete/1". I thought it would be a route problem, but when I tested the route file, I got a 404 even before reaching the route. Here's an example:

    Route::get('admin/users/edit/(:num)', function()
    {
        return "Holy Hell.";
    });

"Holy Hell" is never printed into the screen.

Here's the config for "users":

    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'));

Things that I noticed / Checked:

  • The index view, where is the users list, got a "URL::to_route('admin/users/edit')" function. I have no errors on the screen, so Laravel understands that the route 'admin/users/edit' is set correctly.
  • I know that this is not a general problem, because the "edit" and "delete" methods for the other CMS sections have no issues.
  • The views for these methods are there. So this is not a "file not found" issue.

I wonder if I'm missing something really obvious here. Any ideas? If not, would anyone please tell me how to debug this?

Thank you very much.

War es hilfreich?

Lösung

EDIT: Heads up

Your routes are in a bad order. Reverse them. Routes are evaluated top down, so anything with admin/products in the route will route to admin.products@index and nothing else.

In your edit method, you need to have the id parameter defined.

Since you didn't post your controller, I'm assuming this is why, since the closure does not have the $id passed to it. Example:

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

In your case, you probably don't want the optional part unless you plan on spewing out an error (or redirecting on error).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top