2015-06-01 125 views
0

我在使用子文件夾中的控制器路由時遇到問題。我嘗試了Laravel Controller Subfolder routing中提出的解決方案,但我無法使其運行。laravel中的子文件夾路由5

文件夾結構

HTTP 
    Controllers 
     Admin 
     AdminControllers 
     User 
     UserControllers 
     BaseController 

Admincontrollers在定義的 '應用程序\ HTTP \控制器\管理員' 命名空間

routes文件

Route::group(['middleware'=> 'admin','prefix' => 'admin'], function() { 
    Route::get('home', '[email protected]'); 
    Route::get('home', 'Admin\[email protected]'); 
    Route::resource('events', 'AdminEventController'); 
    Route::resource('events', 'Admin\AdminEventController'); 
    Route::get('myevents', '[email protected]'); 
    Route::get('myevents', 'Admin\[email protected]'); 
    Route::resource('groups', 'AdminGroupController'); 
    Route::resource('users', 'AdminUserController'); 
}); 

這似乎不可思議,但它是隻有這樣才能保證它現在正常工作。 如果我刪除

Route::get('myevents', 'Admin\[email protected]'); 
    //errormessage Class App\Http\Controllers\AdminEventController does not exist 

如果我刪除

如果我把控制器控制器命名空間(而不是管理員之一) 我仍然獲得

//errormessage Class App\Http\Controllers\AdminEventController does not exist 

當只添加的路線是

Route::resource('events', 'AdminEventController'); 
+1

你試過完全合格的控制器的名字嗎?例如。 '路線:: get('home','App \ Http \ Controllers \ Admin \ AdminHomeController @ index');'我的猜測是Laravel(或者是composer自動加載器)試圖猜測你指的是什麼,它錯了。 – Kryten

+0

這並沒有訣竅,但新的錯誤給了我一個想法,現在它已經修復 – JorenV

回答

0

是如果您的應用程序變得這樣更大,則使用子文件夾構建控制器是有意義的。但是在這裏和那裏移動文件需要更多的努力。讓我解釋一下結構。

例如,我們想要一個子文件夾app/Http/Controllers/Admin,然後在裏面有我們的AdminController.php,沒關係。我們需要的文件本身裏面做什麼:

正確的命名空間 - 指定文件夾內:

namespace App\Http\Controllers\Admin; 

使用的控制器 - 從你內心的命名空間Laravel並不能「理解」擴展控制器,所以你需要補充一點:

use App\Http\Controllers\Controller; 

路線 - 指定完整路徑 這將不再工作:

Route::get('admin', '[email protected]'); 

這是正確的做法:

Route::get('admin', 'Admin\[email protected]'); 

這就是它 - 現在你可以從子文件夾中使用您的控制器。

參考(測試): http://laraveldaily.com/moving-controllers-to-sub-folders-in-a-correct-way/ 通過:波維拉斯科羅普