我正在开发一个 Laravel API 项目,即使我已经在 paths/api.php 中设置了 EventController 和路由,我的 /api/events 路由仍然返回 404 错误。尽管服务器正确运行并查看了该路由的日志,但它仍然无法工作,并且当我运行 php artisan route:list 时该路由不会出现。
我尝试在routes/api.php文件中定义我的API路由,并在Http/Controllers/Api目录中设置EventController。这是我的设置的相关代码:
routes/api.php 中的 API 路由:
`<?php
use App\Http\Controllers\Api\AttendeeController;
use App\Http\Controllers\Api\EventController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Route::apiResource('events', EventController::class);
Route::apiResource('events.attendees', AttendeeController::class)
->scoped(['attendee' => 'event']);
Route::get('/test', function () {
return response()->json(['message' => 'Test route']);
});`
Http/Controllers/Api/EventController.php 中的EventController:
`<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class EventController extends Controller
{
public function index()
{
return response()->json(['message' => 'Events listed successfully']);
}
public function store(Request $request) { /* ... */ }
public function show(string $id) { /* ... */ }
public function update(Request $request, string $id) { /* ... */ }
public function destroy(string $id) { /* ... */ }
}`
RouteServiceProvider.php:
`<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace('App\Http\Controllers\Api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}
}
`
我希望 /api/events 路由显示来自 EventController 的数据,但收到了 404 错误。服务器日志显示路由正在被访问,但它仍然返回 404。我手动创建了 api.php 和 RouteServiceProvider.php,因为它们在我的项目中丢失了。
尽管做出了清除配置缓存和发布供应商文件等所有努力,但 php artisan route:list 命令不显示我的 API 路由,这是不寻常的。
由于您使用的是 Laravel 11,为了将 api 路由注册到应用程序中,您需要使用:
php artisan install:api
此外,Laravel 11 中不再使用
RouteServiceProvider
。路由配置现已移至 bostrapp/app.php
注意:如果上述命令不起作用,您可以在
bostrapp/app.php
中手动注册api路由:
->withRouting(
api: __DIR__.'/../routes/api.php',
apiPrefix: 'api/',
)
阅读更多官方文档