【问题标题】:laravel api route not found but exists in route listlaravel api 路由未找到但存在于路由列表中
【发布时间】:2021-05-25 05:47:18
【问题描述】:

我正在尝试将补丁路由添加到routes/api.php,但即使在尝试route:cache 之后我也会收到“找不到路由”。它已在 route:list 中注册,并且该范围内的其他路由正在运行。

这是我的代码:

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::group([
    'prefix' => 'v1',
    'namespace' => 'App\Http\Controllers\Api\V1',
], function() {

    Route::group([
        'prefix' => '/users',
    ], function() {
        Route::get('/{user}', 'UsersController@show');
        Route::patch('/{user}/updateStatus', 'UsersController@updateStatus');
    });

});

这是我在控制器操作中的代码:


<?php

namespace App\Http\Controllers\Api\V1;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller {
    public function updateStatus(Request $request, User $user) {
         # my logic
    }
}

路由注册为/api/v1/users/{user}/updateStatus,但我得到404。

顺便说一句,我使用的是 laravel 8 和 php 7.3

【问题讨论】:

  • Welcome to SO ... 可能是user 没有退出并且您使用的路由模型竞价因此它会返回 404 错误
  • 您发送的是 JSON 原始数据还是表单数据?
  • 模型绑定工作正常,我也有一个显示动作,模型绑定在这种情况下工作得很好。我也使用原始 json 格式。

标签: php laravel


【解决方案1】:

我认为 web 服务器会自动将 url 更改为小写,所以你必须在 laravel 路由中使用小写,所以你必须将“updateStatus”更改为“updatestatus”或“update-status”

【讨论】:

  • 谢谢。这就是问题所在。我将网址更改为其他内容并且有效。
【解决方案2】:

在此代码中,如果您发送给 Api 的带有 id 的 $user 不存在,您将看到 404 HTTP 状态代码。 请记住,如果您想缓存您的路线,您需要在路线发生任何更改后执行此操作以应用您的更改。

【讨论】:

  • 用户已定义并显示该特定用户的路线运行良好。我什至在路由定义和 dd($request) 中尝试了匿名函数,但路由不起作用,我得到 404
  • @Sina 对于匿名函数,您必须定义所有路由参数。你检查了吗?
【解决方案3】:

在你的路由前缀中它应该是“api/v1”

Route::group([
    'prefix' => 'api/v1',
    'namespace' => 'App\Http\Controllers\Api\V1',
], function() {

也试试

php artisan cache:clear
php artisan optimize

【讨论】:

  • 路由位于routes/api.php 中,它们会自动获取 api 作为前缀。其他路线也在工作。我也改变了路线的顺序。会不会是问题?
  • 您可以尝试更改顺序,但这不重要。
  • 这可能是因为你使用了用户 $user 作为第二个参数,你应该只使用 $user。试试这个应该可以解决问题。
猜你喜欢
  • 2018-12-27
  • 2020-10-26
  • 2019-07-18
  • 2016-02-27
  • 2019-05-03
  • 2021-11-06
  • 2019-03-21
  • 2022-01-14
相关资源
最近更新 更多