我正在 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';
});
}
}
原文由 I am the Most Stupid Person 发布,翻译遵循 CC BY-SA 4.0 许可协议
虽然 laravel 有时很神奇,但它只有在你坚持默认配置和约定的情况下才能工作。
您 可以 将控制器放置在任何地方(哎呀,甚至可以从数据库加载
eval
它们),但您必须相应地更改配置。我怀疑您在 RouteServiceProvider 中配置了错误的命名空间。默认情况下它是
App\Http\Controllers
。更改默认文件夹
如果您所有的控制器都在同一个文件夹中,请将其更改为
App\Student\Controllers
并忘记它。多个模块
如果你想有多个模块,然后将你的 RotueServiceProvider 命名空间配置更改为
App
并在路由文件中使用Student\Controllers\StudentController@list