【问题标题】:Laravel Not Finding Route Middleware by AliasLaravel 找不到别名的路由中间件
【发布时间】:2015-08-13 15:12:29
【问题描述】:

在我的开发设置中,我的 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 行中的反射异常: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' );
} );

【问题讨论】:

    标签: php laravel routing laravel-5 middleware


    【解决方案1】:

    如果composer dump-autoload 不工作,那么试试这个。首先从根路径中删除 composer.lock 文件并运行 composer update --no-scripts 。希望它会起作用。

    【讨论】:

      【解决方案2】:

      我解决了这个问题。原来Wincache 破坏了我的代码。我添加了以下内容,现在可以正常使用:

      if( ini_get( 'wincache.ocenabled' ) )
      {
          ini_set( 'wincache.ocenabled', '0' );
      }
      

      【讨论】:

        猜你喜欢
        • 2015-10-26
        • 2019-07-19
        • 2016-11-15
        • 2017-02-23
        • 2020-03-26
        • 2019-12-27
        • 2015-05-21
        • 2016-05-03
        • 1970-01-01
        相关资源
        最近更新 更多