在我的开发设置中,我的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' );
} );
答案 0 :(得分:0)
如果composer dump-autoload
无效,请尝试此操作。首先从根路径中删除composer.lock
文件并运行composer update --no-scripts
。希望它能奏效。