Laravel 4/5 早期版本中,app/controllers/admin 等子目錄下的控制器不在 Composer 自動加載列表,每次新增需執行 composer dump-autoload。通過 ClassLoader::addDirectories 可將其納入框架自動加載,實現「保存即生效」。
// app/start/global.php (Laravel 4) / bootstrap/app.php 附近 (Laravel 5.0-5.2)
ClassLoader::addDirectories([
app_path() . '/commands',
app_path() . '/controllers',
app_path() . '/controllers/admin', // ← 關鍵:添加子目錄
app_path() . '/models',
app_path() . '/database/seeds',
]);
app/controllers/admin/UserController.php 創建控制器Route::get('admin/user', 'UserController@index');composer dump-autoload,瀏覽器訪問即可生效若 app/controllers/UserController.php 與 app/controllers/admin/UserController.php 同名:
controllers 在前 → 外層生效controllers 前面// app/controllers/admin/UserController.php
<?php
namespace App\Controllers\Admin;
use App\Models\User;
use Illuminate\Routing\Controller;
class UserController extends Controller {
public function index() { return User::all(); }
}
// 路由
Route::group(['namespace' => 'App\Controllers\Admin', 'prefix' => 'admin'], function () {
Route::get('user', 'UserController@index');
});
優勢: 物理隔離 + 邏輯隔離,彻底消除衝突,符合 PSR-4,現代 Laravel (5.3+) 默認即此結構。
ClassLoader::addDirectories 或 composer.json autoload.classmapapp/Http/Controllers 已納入 composer.json autoload.psr-4,子目錄自動識別,無額外配置app/Models 亦同addDirectories 臨時解決免 dump-autoloadapp/Http/Controllers/Admin + 命名空間