記錄兩個官方文檔未明確說明但極具實用價值的 Laravel 技巧,解決 Route::controller 批量註冊時的命名難題,以及多開發機環境自動識別痛點。
Route::controller($uri, $controller, $names = []) 第三個參數接受陣列,Key 為控制器方法名(含 HTTP 動詞前綴),Value 為路由名稱。
Route::controller('admin', 'AdminController');
// 自動映射:
// GET /admin -> getIndex()
// GET /admin/login -> getLogin()
// POST /admin/login -> postLogin()
route('name') 生成 URL)Route::controller('admin', 'AdminController', [
'getIndex' => 'admin.index',
'getLogin' => 'admin.login',
'postLogin' => 'admin.login.post', // 也可同名區分 GET/POST
]);
現在可在視圖/控制器中優雅地使用:
<a href="{{ route('admin.login') }}">登錄</a>
return redirect()->route('admin.index');
避免硬編碼 URL,重構時只需改路由定義。
默認 detectEnvironment 依賴主機名陣列,多開發機需不斷添加主機名,維護麻煩。改用系統環境變量 LARAVEL_ENV 判斷:
bootstrap/start.php (Laravel 4) 或 bootstrap/app.php (Laravel 5)// Laravel 4 風格
$env = $app->detectEnvironment(function () {
// 優先讀取系統環境變量
$env = getenv('LARAVEL_ENV');
if ($env) return $env;
// 回退到主機名匹配
return [
'local' => ['homestead', 'dev-machine-1', 'dev-machine-2'],
];
});
| 環境 | 設置方式 | 示例 |
|---|---|---|
| Apache | SetEnv 指令 | SetEnv LARAVEL_ENV local (在 VirtualHost 或 .htaccess) |
| Nginx + PHP-FPM | fastcgi_param | fastcgi_param LARAVEL_ENV local; (在 location ~ \.php$ 塊中) |
| 命令行 | 前綴變量 | LARAVEL_ENV=local php artisan migrate |
| Windows | 系統環境變量 | 控制面板 → 系統 → 高級 → 環境變量 → 新建 LARAVEL_ENV=local |