Laravel:控制器类不存在

7

我创建了一个简单的控制器并定义了一个函数。但是当我运行它时,它返回一个错误,提示控制器不存在。

在我的web.php中指定了路由。

<?php
  Route::get('/', function () { return view('front.welcome'); });
  Route::get('plan','PlanController@PlanActivity')->name('plan');

在我的控制器中,我的代码如下:

<?php
 namespace App\Http\Controllers\Front;
 use App\Http\Controllers\Controller as BaseController;
 use Illuminate\Http\Request;

class PlanController extends Controller {

public function PlanActivity()
{
    dd("hello");
    //return view('admin.index');
}
}

这个控制器创建在 App\Http\Controllers\Front 目录下,即前端文件夹。

错误:

ReflectionException (-1) 类 App\Http\Controllers\PlanController 不存在。


1
Route::get('plan','Front\PlanController@PlanActivity')->name('plan'); - Sohel0415
使用 App\Http\Controllers\Controller 作为 BaseController,@javed 可以删除此行,因为它不是必需的。 - bipin
@javed,请检查您的控制器命名空间和文件夹名称是否匹配。 - bipin
2个回答

10

在前面添加Front部分:

Route::get('plan', 'Front\PlanController@PlanActivity')->name('plan');

同时,将控制器的顶部更改为:

namespace App\Http\Controllers\Front;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

然后运行composer du

根据文档

默认情况下,RouteServiceProvider将您的路由文件包含在一个命名空间组中,允许您注册控制器路由而无需指定完整的App\Http\Controllers命名空间前缀。因此,您只需要指定基础App\Http\Controllers命名空间之后的命名空间部分即可。


1
在控制器中定义 namespace App\Http\Controllers\Front; 这样做可以吗? - Javed

0

首先在定义路由时,确保对应正确的控制器路径。正确的路径是:

Route::get('plan','Front/PlanController@PlanActivity')->name('plan');

第二步,您已经导入了Controller类作为BaseController。因此,您应该扩展BaseController而不是Controller

class PlanController extends BaseController {

public function PlanActivity()
{
    dd("hello");
    //return view('admin.index');
}
}

有趣的是,Leo从我的答案中复制了错误的代码,而你从他的答案中复制了错误的代码。 - Alexey Mezenin
@AlexeyMezenin 不用担心,我们知道你是 Laravel 中最优秀的用户!我们从你身上学到了很多。 - Leo
@Alexey 在我回答的时候,你的答案还没有发布。我只是从问题中复制了一些文本。 - Usama

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