Class App\Http\Controllers\StudentController 在 Laravel 5 中不存在
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');
的时候出现了错误。
错误是,
Class App\Http\Controllers\StudentController does not exist
文件夹结构
学生管理员
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';
});
}
}
它给你那个错误,因为控制器找不到你正在调用的 class .. 在你的控制器顶部添加
use App\Student;
让它发挥作用..
您在错误的位置创建了控制器。
默认控制器位置是:
app/Http/Controllers
你的控制器放错地方了。它应该在 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');
}
....
}
虽然 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');
尝试按此重写您的路线:
Route::get('/list', '\App\Student\Controllers\StudentController@list');
希望对你有帮助:)
转到RouteServiceProvider.php
并将命名空间更改为 default
protected $namespace = 'App\Http\Controllers';
将先前创建的 Controller 移动到 Controllers 文件夹中的另一个文件夹时,会出现同样的问题:
|Controllers
|Controller.php
|--|Setup [Folder]
|MovedController.php
只需确保 命名空间 正确并导入 Controller.php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
我正在 Laravel 中构建一个名为 Student 的模块。
我使用 Student 文件夹中的 routes.php 文件来编写学生模块的路由..
当我只使用 Route::get('/list', function () { return view('welcome');});
程序时 正常,没有错误 。
但是我在使用Route::get('/list', 'StudentController@list');
的时候出现了错误。
错误是,
Class App\Http\Controllers\StudentController does not exist
文件夹结构
学生管理员
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';
});
}
}
它给你那个错误,因为控制器找不到你正在调用的 class .. 在你的控制器顶部添加
use App\Student;
让它发挥作用..
您在错误的位置创建了控制器。 默认控制器位置是:
app/Http/Controllers
你的控制器放错地方了。它应该在 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');
}
....
}
虽然 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');
尝试按此重写您的路线:
Route::get('/list', '\App\Student\Controllers\StudentController@list');
希望对你有帮助:)
转到RouteServiceProvider.php 并将命名空间更改为 default
protected $namespace = 'App\Http\Controllers';
将先前创建的 Controller 移动到 Controllers 文件夹中的另一个文件夹时,会出现同样的问题:
|Controllers
|Controller.php
|--|Setup [Folder]
|MovedController.php
只需确保 命名空间 正确并导入 Controller.php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;