2013-08-25 103 views
0

我注意到Laravel 4在使用路线时有点特殊。我有一个路由组,看起来像这样:我注意到Laravel 4:投掷组中的路线notfoundhttpexception

// Employers routes 
Route::group(array('prefix' => 'employers'), function(
    Route::get('/', array('as' => 'employers.index', 'uses' => '[email protected]')); 
    Route::get('create', array('as' => 'employers.create', 'uses' => '[email protected]')); 
    Route::post('/', array('as' => 'employers.store', 'uses' => '[email protected]', 'before' => 'csrf')); 
    Route::get('search', array('as' => 'employers.search', 'uses' => '[email protected]')); 
    Route::get('{id}', array('as' => 'employers.show', 'uses' => '[email protected]')); 
    Route::get('{id}/edit', array('as' => 'employers.edit', 'uses' => '[email protected]')); 
    Route::patch('{id}/update', array('as' => 'employers.update', 'uses' => '[email protected]', 'before' => 'csrf')); 
    Route::delete('{id}/destroy', array('as' => 'employers.destroy', 'uses' => '[email protected]', 'before' => 'csrf')); 
)); 

,但是,当我尝试在新的路由添加我的第一个路由之前将其添加到使用{id}通配符作为它的网址中的第一个参数,否则我得到一个notfoundhttpexception。这是正常的吗?因此,举例来说,这个工作(在employers.search航线增加:

// Employers routes 
Route::group(array('prefix' => 'employers'), function(
    Route::get('/', array('as' => 'employers.index', 'uses' => '[email protected]')); 
    Route::get('create', array('as' => 'employers.create', 'uses' => '[email protected]')); 
    Route::post('/', array('as' => 'employers.store', 'uses' => '[email protected]', 'before' => 'csrf')); 
    Route::get('{id}', array('as' => 'employers.show', 'uses' => '[email protected]')); 
    Route::get('search', array('as' => 'employers.search', 'uses' => '[email protected]')); 
} 

结果在路由employers.search未找到

回答

1

这是正常现象路由在自上而下的方式进行评估

?。

{id}是“一网打尽”路线

所以路由系统看到/search - 并且认为search{id} - 所以它加载该路由但ñ它找不到search的ID - 因此它失败。

因此,请将您的“全部捕捉”路线保留在列表底部 - 并且它将正常工作。

+0

感谢您的回复。我已经猜到这可能是按预期工作,但不是太确定:) – Iain