You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10.4执行php artisan optimize报错:Cannot redeclare common()

问题分析

你遇到的Cannot redeclare common()错误,本质是**api.php文件被重复加载**,导致全局函数common被多次声明。尽管你只写了一次函数,但Laravel执行optimize命令时,可能因缓存残留、路由注册逻辑重复等原因,多次解析了路由文件。

解决方法

1. 清理旧缓存

先彻底清除所有缓存文件,避免旧的函数定义残留:

php artisan optimize:clear

之后重新运行php artisan optimize,验证是否还报错。

2. 检查路由注册逻辑

打开app/Providers/RouteServiceProvider.php,查看mapApiRoutes方法,确认是否重复调用了loadRoutesFrom:

public function mapApiRoutes()
{
    Route::prefix('api')
         ->middleware('api')
         ->namespace($this->namespace)
         ->group(base_path('routes/api.php'));
    // 确保没有重复的上述路由加载代码
}

若存在重复代码,删除多余部分即可。

3. 避免在路由文件定义全局函数

全局函数易引发命名冲突或重复声明问题,更规范的做法是把路由复用逻辑封装到类中:

  • 创建app/Helpers/RouteHelper.php文件:
namespace App\Helpers;

use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;

class RouteHelper
{
    public static function common(string $scope)
    {
        Route::post('register', [AuthController::class, 'register']);
        Route::post('login', [AuthController::class, 'login']);

        Route::middleware(['auth:sanctum', $scope])->group(function() {
            Route::get('user', [AuthController::class, 'user']);
            Route::post('logout', [AuthController::class, 'logout']);
            Route::put('users/info', [AuthController::class, 'updateInfo']);
            Route::put('users/password', [AuthController::class, 'updatePassword']);
        });
    }
}
  • 在api.php中调用静态方法:
use App\Helpers\RouteHelper;

RouteHelper::common('你的scope值');

这种方式既避免了全局函数的问题,也让代码结构更清晰。

内容的提问来源于stack exchange,提问作者almiros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:53:11