2016-02-08 107 views
1

我在Laravel 5中有以下路由定義。當我按以下方式對路由進行分組時,似乎路由admin.proposals.home將不起作用,如果我提供"/"作爲get路徑,並且將如果事情後工作(如home)被提供:Laravel - 根目錄路由在嵌套路由組中行爲異常

/** 
* Routes for system administrators. 
*/ 
Route::group(['prefix' => 'admin', 'middleware' => 'admin'], function() 
{ 
    Route::group(['prefix' => 'people'], function() 
    { 
     Route::get('/', ['as' => 'admin.people.home', 'uses' => '[email protected]']); 
     Route::get('/profile/{userName}', ['as' => 'admin.person.profile', 'uses' => '[email protected]']); 
     Route::get('/organization/{id}', ['as' => 'admin.people.organization', 'uses' => '[email protected]']); 
    }); 

    Route::group(['prefix' => 'projects'], function() 
    { 
     Route::get('/', ['as' => 'admin.projects.home', 'uses' => '[email protected]']); 
     Route::get('/{projectId}', ['as' => 'admin.project.view', 'uses' => '[email protected]']); 

     Route::group(['prefix' => 'proposals'], function() 
     { 
      //problematic line below 
      Route::get('/home', ['as' => 'admin.proposals.home', 'uses' => '[email protected]']); 
      Route::get('/{proposalId}', ['as' => 'admin.proposal.view', 'uses' => '[email protected]']); 
     }); 

    }); 

}); 

具體地,如果我更改行:

Route::get('/home', ['as' => 'admin.proposals.home', 
      'uses' => '[email protected]' 
      ]); 

到:

Route::get('/', ['as' => 'admin.proposals.home', 
      'uses' => '[email protected]' 
      ]); 

我得到了一個錯誤說:

Trying to get property of non-object (View: ... \views\admin\projects\view.blade.php) 

但是,在admin.proposals.home路由指向控制器index()方法和無關與view.blad.php

將路徑更改回get('/home')完美無缺。

我錯過了什麼?

回答

1

這是一個Route定位問題。

既然你的URI admin/projects/作爲admin.project.home的路線,並admin/projects/{projectId}後優先admin/projects/proposals/

Laravel需要proposals作爲projectId的路線。

Route::group(['prefix' => 'projects'], function() 
    { 
     Route::group(['prefix' => 'proposals'], function() 
     { 
      //problematic line below 
      Route::get('/', ['as' => 'admin.proposals.home', 'uses' => '[email protected]']); 
      Route::get('/{proposalId}', ['as' => 'admin.proposal.view', 'uses' => '[email protected]']); 
     }); 
     Route::get('/', ['as' => 'admin.projects.home', 'uses' => '[email protected]']); 
     Route::get('/{projectId}', ['as' => 'admin.project.view', 'uses' => '[email protected]']); 



    }); 

試試這個命令,讓我知道你得到了什麼。但純粹是一個路線訂單問題。

+0

謝謝!現在我想我明白這個問題的原因。將嘗試並更新你! –

+0

謝謝,它現在像一個魅力。這有助於瞭解路由如何工作。 –

+0

很高興幫助:) –