簡體   English   中英

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

[英]Class App\Http\Controllers\StudentController does not exist in Laravel 5

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

盡管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');

它會給你這個錯誤,因為控制器無法找到你正在調用的類..在你的控制器頂部添加

use App\Student;

讓它工作..

您在錯誤的位置創建控制器。 默認控制器位置是:

app/Http/Controllers

轉到RouteServiceProvider.php並將更改的命名空間更改為默認值

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

你的控制器在錯誤的地方。 它應該在app/Http/Controllers/

您可以在app/Http/Controllers/創建更多文件夾Student,並擴展主Controller以使您的隔離模塊學生

你的文件結構應該像:

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

   ....
}

嘗試通過以下方式重寫您的路線:

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

希望它能幫到你:)

將以前創建的Controller移動到Controllers文件夾內的另一個文件夾時,會出現同樣的問題:

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

只需確保命名空間正確並導入Controller.php

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM