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

时间:2017-09-06 07:45:55

标签: php laravel laravel-5 laravel-routing laravel-controller

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

我使用Student文件夹中的routes.php文件来编写实际存在于学生模块的路由。

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

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

错误是,

  

Class App \ Http \ Controllers \ StudentController不存在

文件夹结构

enter image description here

学生控制器

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';
        });
    }
}

7 个答案:

答案 0 :(得分: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');

答案 1 :(得分:2)

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

use App\Student;

让它发挥作用..

答案 2 :(得分:1)

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

app/Http/Controllers

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

您的控制器位置错误。它应该在app/Http/Controllers/内。

您可以在app/Http/Controllers/内创建更多文件夹学生,并扩展主控制器以使您的孤立模块学生

你的文件结构应该是:

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');
    }

   ....
}

答案 5 :(得分:0)

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

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

希望它对你有所帮助:)。

答案 6 :(得分:0)

将以前创建的 Controller 移到 Controllers 文件夹内的另一个文件夹中时,会发生相同的问题:

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

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

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