2013-08-25 165 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