将Laravel 4.2升级到5.0,获取[ReflectionException]类App \ Http \ Controllers \ PagesController不存在

时间:2015-05-21 13:58:21

标签: exception laravel-5 upgrade

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

我没有在4.2版本上遇到任何类似的错误。我尝试过作曲家dump-autoload没有效果。

如更新指南中所述,我已按原样移动了所有控制器,并将namespace中的app/Providers/RouteServiceProvider.php属性设为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'));

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

1 个答案:

答案 0 :(得分:0)

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

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

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

您有两种选择:

  1. 将适当的命名空间添加到控制器的顶部。
  2. 在组之外加载路径,因此不会自动添加名称空间。
  3. 我会选择#1选项,因为从长远来看,这会让你头疼。