Laravel 5 中不存在 App\\Http\\Controllers\\StudentController 类

新手上路,请多包涵

我正在 Laravel 中构建一个名为 Student 的模块。

我使用 Student 文件夹中的 routes.php 文件将路由写入学生模块。

当我只使用 Route::get('/list', function () { return view('welcome');}); 程序工作 正常没有错误

但是当我使用 Route::get('/list', 'StudentController@list'); 时出现错误。

错误是,

类 App\Http\Controllers\StudentController 不存在

文件夹结构

在此处输入图像描述

学生控制器

namespace App\Student\Controllers;

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

class StudentController extends Controller
{
    public function list(){
        echo "Hello"
    }
}

学生服务提供商

namespace App\Student;

use App\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;

class StudentServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Define the routes for the application.
     *
     * @internal param Router $router
     */

    public function map()
    {
        Route::group([
            'namespace' => $this->namespace,
            'prefix' => 'students',
        ], function ($router) {
            require __DIR__ . '/routes.php';
        });
    }
}

原文由 I am the Most Stupid Person 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 752
2 个回答

虽然 laravel 有时很神奇,但它只有在你坚持默认配置和约定的情况下才能工作。

可以 将控制器放置在任何地方(哎呀,甚至可以从数据库加载 eval 它们),但您必须相应地更改配置。

我怀疑您在 RouteServiceProvider 中配置了错误的命名空间。默认情况下它是 App\Http\Controllers

更改默认文件夹

如果您所有的控制器都在同一个文件夹中,请将其更改为 App\Student\Controllers 并忘记它。

 class RouteServiceProvider extends ServiceProvider
{
    // ...
    protected $namespace = 'App\Student\Controllers';
    // ...
}

多个模块

如果你想有多个模块,然后将你的 RotueServiceProvider 命名空间配置更改为 App 并在路由文件中使用 Student\Controllers\StudentController@list

 class RouteServiceProvider extends ServiceProvider
{
    // ...
    protected $namespace = 'App';
    // ...
}

Route::get('/list', 'Student\Controllers\StudentController@list');

原文由 Coloured Panda 发布,翻译遵循 CC BY-SA 3.0 许可协议

转到 RouteServiceProvider.php 并将命名空间更改为默认值

protected $namespace = 'App\Http\Controllers';

原文由 Abdul Wali Khan Afridi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏