代码之家  ›  专栏  ›  技术社区  ›  titonior

ReflectionException-中间件类不存在Laravel 5.5

  •  5
  • titonior  · 技术社区  · 6 年前

    我知道我不是第一个有这样问题的人。我已经阅读了有关Stackoverflow和其他来源的所有现有信息,但这并不能解决我的问题,我总是会得到一个 ReflectionException Class App\Http\Middleware\xxx does not exist .

    <?php
    
    namespace App\Http\Middleware\xxx;
    
    use Closure;
    
    class xxx
    {
    
        public function handle($request, Closure $next)
        {
    
            return $next($request);
        }
    }
    

    别开玩笑了,这真是我的课。我已将其重命名为 xxx 避免输入错误。

    我所有的路线都会经过 web admin 中间件:

    Route::middleware(['web', 'admin'])->group(function() {  
    

    这是我的 /app/Http/Kernel.php :

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\xxx::class,
        ],  
    
    • 文件名为 xxx.php 它的位置是 App\Http\Middleware\ .
    • 命名空间正确
    • composer dump autoload无法解决此问题

    我还试图修改我的作曲家。json:

    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories",
            "App/Http/Middleware/xxx.php"
        ],
    

    导致以下警告:

    Warning: Ambiguous class resolution, "App\Http\Middleware\xxx\xxx" was found in both "$baseDir . '/app/Http/Middleware/xxx.php" and "/code/App/Http/Middleware/xxx.php", the first will be used.
    
    3 回复  |  直到 6 年前
        1
  •  4
  •   Alexey Mezenin    6 年前

    首先,将命名空间更改为:

    namespace App\Http\Middleware;
    

    然后删除 "App/Http/Middleware/xxx.php" 从…起 composer.json 并运行 composer du

    你还需要 remove web middleware from the routes file 如果您使用的是5.2.27及更高版本:

    Route::middleware(['admin'])->group(function() { 
    
        2
  •  2
  •   Sohel0415    6 年前

    将命名空间更改为-

    namespace App\Http\Middleware;
    
        3
  •  2
  •   user320487 user320487    6 年前

    您可能在中缓存了文件 bootstrap/cache 目录删除这些内容,然后重新加载composer dumpautoload。

    如果同样失败,请删除整个供应商目录并删除 composer.lock 然后运行 composer install .