在Laravel 5中找不到控制器类(Controller)

7

我刚接触Laravel,想写一些基础代码来熟悉,但是创建了一个新的控制器处理路由后,出现了一个致命异常,提示找不到类'Controller'!

(controller.php与当前目录在同一路径下)

controller.php的代码是默认的。

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

abstract class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

这是我的PagesController.php代码。
<?php

class PagesController extends Controller
{
    public function home()
    {
        $name = 'Yeah!';
        return View::make('welcome')->with('name',$name);
    }
}

这是route.php的代码

<?php

Route::get('/','PagesController@home');

除了显示变量 $name 而不是 Laravel 5 之外,welcome.blade.php 代码是默认值。 我做错了什么吗?


确保您的控制器也有命名空间。 - Zarathuztra
5个回答

10

当你引用一个类,比如 extends Controller,PHP 会在当前命名空间中查找这个类。

在这种情况下,它是全局命名空间。然而,Controller 类显然不在全局命名空间中,而是在 App\Http\Controllers 中。

你需要在 PagesController.php 的顶部指定命名空间:

namespace App\Http\Controllers;

我尝试了那个,控制器可以工作,但现在由于命名空间是控制器目录,我得到一个找不到视图的错误。还有其他选择吗? - gospelslide
@gospelslide,你可以在控制器的顶部添加 use View; 或者使用别名 view,像这样:return view('welcome')->with('name', $name); - Limon Monte

2
您需要将命名空间指定给您的Controller类:
class PagesController extends \App\Http\Controllers\Controller

否则,Controller会在默认的根命名空间\中查找,但在该命名空间中不存在。

0
如果您正在子文件夹中创建一个具有不同命名空间的控制器,则在控制器文件中使用以下代码:
use App\Http\Controllers\Controller;

0

我的问题是类名与扩展控制器的类名不同,名称应该相同


0
在你的routes/web.php文件中,使用PagesController的命名空间。
<?php
  use App\Http\Controllers\Controller\PagesController;

  Route::get('/','PagesController@home');

这将使您能够访问PagesController类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接