1

对于我正在开发的 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.";
    });

“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 部分的“编辑”和“删除”方法没有问题。
  • 这些方法的视图在那里。所以这不是“找不到文件”的问题。

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

非常感谢。

4

1 回答 1

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

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

于 2013-06-28T20:46:39.783 回答