[英]Laravel 5.6 Class App\Http\Controllers\PostController does not exist
[英]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.