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

Posted

技术标签:

【中文标题】Laravel 5 中不存在类 App\\Http\\Controllers\\StudentController【英文标题】:Class App\Http\Controllers\StudentController does not exist in Laravel 5Laravel 5 中不存在类 App\Http\Controllers\StudentController 【发布时间】:2018-02-14 14:38:28 【问题描述】:

我正在 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';
        );
    

【问题讨论】:

试试这个Route::get('student/list', 'StudentController@list'); 可以显示App\Providers\RouteServiceProviderroutes.php的内容吗? @Kaspars 这只是students/routes.php 中的Route::get('/list', 'StudentController@list'); 行。我还没有触及 RouteServiceProvider 文件。 github.com/laravel/laravel/blob/master/app/Providers/… 查看此链接:***.com/a/63871723/5857099 【参考方案1】:

它给你这个错误,因为控制器找不到你正在调用的类..在你的控制器添加的顶部

use App\Student;

让它工作..

【讨论】:

感谢您的回答。我也试过了。但结果相同。 哦,我的错,我以为模型丢失了..更新我的答案 不,我还没有为这个项目使用模型。你有解决这个问题的想法吗? 路由找不到控制器..你试过Route::get('/list', 'Student/Controllers/StudentController@list');Route::get('/list', 'Controllers/StudentController@list'); 我不能将它移动到 HTTP 文件夹,因为我必须为这个项目使用这个结构。我也试过Route::get('/list', 'Student/Controllers/StudentController@list');。但同样的错误。 ? :-(【参考方案2】:

您在错误的位置创建控制器。 默认控制器位置是:

app/Http/Controllers

【讨论】:

实际上他可能会这样做..他有自己的编码约定..他改变了它的命名空间,你可以看到..他缺少的是use App\Student 不,当您创建模块时,您可以在另一个文件夹下创建名为“控制器”的文件夹并创建控制器。【参考方案3】:

你的控制器放错地方了。它应该在app/Http/Controllers/ 内。

您可以在app/Http/Controllers/ 中创建更多文件夹 Student 并扩展主控制器以使您的隔离模块 Student

你的文件结构应该是这样的:

app[dir]
----Http[dir]
-------Controllers[dir]
----------Student[dir]
----------Controller.php[file]

你的学生控制器应该看起来像,

namespace App\Http\Controllers\Student;

use App\Http\Controllers\Controller;

class StudentController extends Controller


    public function __construct()
    
        $this->middleware('auth');
    

   ....

【讨论】:

不,当您创建模块时,您可以在另一个文件夹下创建名为“控制器”的文件夹并创建控制器 @IamtheMostStupidPerson 我在这种情况下使用了上述方法。这对你来说可能接受也可能不接受。 当您处理大型项目时,您可能需要创建模块。阅读更多:***.com/a/39846287/8246224 @IamtheMostStupidPerson 我同意你的看法。【参考方案4】:

虽然 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');

【讨论】:

您的回答非常好。我从另一个论坛得到了另一个答案。它只是将protected $namespace = 'App\Student\Controllers'; 添加到学生服务提供商页面。它也工作得很好。【参考方案5】:

尝试通过以下方式重写您的路线:

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

希望对你有帮助:)

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

当您将之前创建的 Controller 移动到 Controllers 文件夹内的另一个文件夹中时,也会出现同样的问题:

|Controllers
|Controller.php
|--|Setup [Folder]
    |MovedController.php

只要确保命名空间正确并导入Controller.php

namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;

【讨论】:

以上是关于Laravel 5 中不存在类 App\Http\Controllers\StudentController的主要内容,如果未能解决你的问题,请参考以下文章

我的控制器在 laravel 项目中不起作用我面临这个错误“Class App\Http\Controllers\HelloController 不存在”

Laravel 目标类 [App\Http\Controllers\App\Http\Controllers\ApiController] 不存在

Laravel 错误“ReflectionException”-“类 App\Http\Kernel 不存在”

Laravel 错误:未捕获的 ReflectionException:类 App\Http\Kernel 不存在

Laravel 6 目标类 [App\Http\Controllers\Admin\Tracker] 不存在

Laravel 6.0 php artisan route:list 返回“目标类 [App\Http\Controllers\SessionsController] 不存在。”