Laravel没有找到Alias的路由中间件

时间:2015-08-13 15:12:30

标签: php laravel routing laravel-5 middleware

在我的开发设置中,我的Laravel项目工作正常,但在将其部署到我的生产服务器之后,我收到了一个错误。错误不会在第一个请求中发生,但在此之后每个请求都会发生。

我怀疑它与缓存有关,但我无法解决问题。

我的app/Http/Kernel.php中有以下内容(注意:还有其他中间件也定义失败,这是一个说明错误的示例):

protected $routeMiddleware = [
        'json-response-headers' => \App\Http\Middleware\JsonResponseHeaders::class,   
    ];

使用它的路由(同样,使用中间件的路径很多,这是一个像其他所有路径一样失败的简单路由的例子):

// system
Route::group( [
    'prefix' => 'system',
    'middleware' => [
        'json-response-headers'
    ]
], function()
{
    Route::get( 'status', 'SystemController@status' );
} );

当我请求/system/status时,它第一次工作(就像我修改routes.php文件时那样)但在此之后,它会出现以下错误:

  

Container.php第736行中的ReflectionException:类json-response-headers不存在

使用以下调用堆栈:

in Container.php line 736
at ReflectionClass->__construct('json-response-headers') in Container.php line 736
at Container->build('json-response-headers', array()) in Container.php line 626
at Container->make('json-response-headers', array()) in Application.php line 674
at Application->make('json-response-headers') in Pipeline.php line 123
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 706
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 671
at Router->dispatchToRoute(object(Request)) in Router.php line 631
at Router->dispatch(object(Request)) in Kernel.php line 236
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 54
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 53

这是我在Laravel 5.0中开始的一个项目,但是已经部分升级到5.1。我在我的开发机器上运行IIS / Windows Server 2008 R2,在IIS / Windows Server 20112 R2上运行它。

我尝试过转储作曲家自动加载并重新优化。

composer dump-autoload
php artisan clear-compiled
php artisan optimize

如果我更改routes.php以使用完整的中间件路径,它可以正常工作,例如:

// system
Route::group( [
    'prefix' => 'system',
    'middleware' => [
        \App\Http\Middleware\JsonResponseHeaders::class // <-- this has changed
    ]
], function()
{
    Route::get( 'status', 'SystemController@status' );
} );

1 个答案:

答案 0 :(得分:0)

如果composer dump-autoload无效,请尝试此操作。首先从根路径中删除composer.lock文件并运行composer update --no-scripts。希望它能奏效。