Laravel 3.x Route问题:即使路由设置也找不到页面

时间:2013-06-28 20:42:32

标签: php routes laravel laravel-3

对于我正在开发的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'设置正确。
  • 我知道这不是一般性问题,因为其他CMS部分的“编辑”和“删除”方法没有问题。
  • 这些方法的观点都在那里。所以这不是“找不到文件”的问题。

我想知道我是否遗漏了一些非常明显的东西。有任何想法吗?如果没有,有人请告诉我如何调试这个吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

编辑:抬头

您的路线状况不佳。扭转他们。路线从上到下进行评估,因此路线中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.";
});

在您的情况下,您可能不需要可选部分,除非您计划喷出错误(或重定向错误)。