升级Laravel 4.2到5.0,得到[ReflectionException]ClassApp\Http\Controllers\PagesController不存在

Upgrading Laravel 4.2 to 5.0, getting [ReflectionException] Class App\Http\Controllers\PagesController does not exist

我正在将我的项目从 laravel 4.2 更新到 laravel 5.0。但是,在我遇到这个错误并在过去 4 小时内一直试图解决它之后。

我在 4.2 版本上没有遇到这样的错误。我试过 composer dump-autoload 没有效果。

如更新指南中所述,我已将所有控制器原样移动,并将app/Providers/RouteServiceProvider.php中的namespace 属性更改为null。所以,我想我所有的控制器都在全局命名空间中,所以不需要在任何地方添加路径。

这是我的 composer.json:

"autoload": {
    "classmap": [
        "app/console/commands",
        "app/Http/Controllers",
        "app/models",
        "database/migrations",
        "database/seeds",
        "tests/TestCase.php"
    ],

页面控制器:

<?php
class PagesController extends BaseController {

  protected $layout = 'layouts.loggedout';

  public function getIndex() {
    $categories = Category::all();

    $messages = Message::groupBy('receiver_id')
                ->select(['receiver_id', DB::raw("COUNT('receiver_id') AS total")])
                ->orderBy('total', 'DESC'.....

还有,这里是 BaseController。

<?php

class BaseController extends Controller {

    //Setup the layout used by the controller.
    protected function setupLayout(){
        if(!is_null($this->layout)) {
            $this->layout = View::make($this->layout);
        }
    }

}

在routes.php中,我调用控制器如下:

Route::get('/', array('as' => 'pages.index', 'uses' => 'PagesController@getIndex'));

任何人都请帮忙。在过去的几个小时里,我一直在摸不着头脑。

路由加载到 app/Providers/RouteServiceProvider.php 文件中。如果你在那里查看,你会看到这段代码:

$router->group(['namespace' => $this->namespace], function($router)
{
    require app_path('Http/routes.php');
});

这会为任何路由添加命名空间,默认情况下是 App\Http\Controllers,因此会出现错误消息。

您有两个选择:

  1. 将适当的命名空间添加到控制器的顶部。
  2. 加载群组 外部 的路由,因此不会自动添加命名空间。

我会选择选项 #1,因为它会让你在漫长的 运行.

中不再头疼。