2016-02-08 30 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

很高兴帮助:) –