You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel API路由/api/events返回404,路由列表初始未显示排查

Laravel API路由404问题排查记录

我在开发Laravel API项目时遇到了异常问题:已在routes/api.php中配置EventController及/api/events路由,但访问该路由始终返回404错误。服务器日志显示请求确实命中了路由,但运行php artisan route:list命令最初无法看到这些API路由。

初始配置代码

routes/api.php

<?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']);
});

app/Http/Controllers/Api/EventController.php

<?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) { /* ... */ }
}

app/Providers/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.php和RouteServiceProvider.php文件,我手动创建并完成配置后,预期/api/events能返回EventController中的数据,但实际收到404错误。尝试清理配置缓存、发布vendor文件等操作后,php artisan route:list仍无法显示API路由,这一现象十分反常。

后续调整尝试

我修改了bootstrap/app.php文件,补充API路由的配置逻辑:

bootstrap/app.php

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',  // 处理根("/")路由
        commands: __DIR__.'/../routes/console.php',
        health: '/up'
    )
    ->withRouting(
        api: __DIR__.'/../routes/api.php',  // 处理API路由
        apiPrefix: 'api/'                   // 确保仅API路由使用前缀
    )
    ->withMiddleware(function (Middleware $middleware) {
        // 必要时添加中间件
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // 必要时添加异常处理
    })->create();

修改后运行php artisan route:list,终于能看到API路由,结果如下:

GET|HEAD        api/events ....................................................................... events.index › Api\EventController@index
  POST            api/events ....................................................................... events.store › Api\EventController@store
  GET|HEAD        api/events/{event} ................................................................. events.show › Api\EventController@show
  PUT|PATCH       api/events/{event} ............................................................. events.update › Api\EventController@update
  DELETE          api/events/{event} ........................................................... events.destroy › Api\EventController@destroy
  GET|HEAD        api/events/{event}/attendees ........................................ events.attendees.index › Api\AttendeeController@index
  POST            api/events/{event}/attendees ........................................ events.attendees.store › Api\AttendeeController@store
  GET|HEAD        api/events/{event}/attendees/{attendee} ............................... events.attendees.show › Api\AttendeeController@show
  PUT|PATCH       api/events/{event}/attendees/{attendee} ........................... events.attendees.update › Api\AttendeeController@update
  DELETE          api/events/{event}/attendees/{attendee} ......................... events.attendees.destroy › Api\AttendeeController@destroy
  GET|HEAD        api/test ..................................................................................................................
  GET|HEAD        api/user ..................................................................................................................
  GET|HEAD        sanctum/csrf-cookie ..................................... sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show
  GET|HEAD        storage/{path} .............................................................................................. storage.local

当前遗留问题

尽管路由列表已正常显示/api/events等API路由,但实际访问这些路由时仍返回404错误。


内容的提问来源于stack exchange,提问作者Huda Ala'eddin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:04:49