我正在Laravel建立一个名为Student的模块。
我使用Student文件夹中的routes.php文件来编写实际存在于学生模块的路由。
当我只使用Route::get('/list', function () { return view('welcome');});
程序正常工作没有错误时。
但是当我使用Route::get('/list', 'StudentController@list');
时出现错误。
错误是,
Class 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';
});
}
}
答案 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;