Laravel API只在特定的路由上工作,其他人抛出404错误



更新:运行php artisan route:clear可以修复问题,但只是部分修复。在我运行该命令并成功使用API后,我调用的路由再次从路由列表缓存中消失,它迫使我再次运行该命令。我不知道为什么会发生这种事。


我正在尝试使用我设置的Laravel API,但由于某种原因,我只能使用三条可用路由中的一条,其他两条路由都是404。

Route::post('/login', 'APIUserController@login'); //this works
Route::group(['middleware' => ['auth:api']], function () {
Route::post('/roles/all', 'APIRoleController@getAll'); //this doesn't work - error 404
Route::post('/permissions/all', 'APIPermissionController@getAll'); //this doesn't work - error 404
});

路由指向正确的位置,函数存在,并且我通过Postman进行的调用具有正确的参数(url示例:'http://localhost:8000/api/roles/all',GET调用,Authorization字段中的auth令牌(。

我把路由放在中间件内部还是外部也没关系(以防它与oauth2令牌或中间件本身有问题有关(。

下面是我试图调用的一个函数的示例:

public function getAll()
{
$role = Role::all();
return response()->json(['role' => $role], 200);
}

编辑:这是php的输出手工路线:列出

+--------+----------+----------------------------------------------------------+-----------------------------------+---------------------------------------------------------------------------+------------+
| Domain | Method   | URI                                                      | Name                              | Action
| Middleware |
+--------+----------+----------------------------------------------------------+-----------------------------------+---------------------------------------------------------------------------+------------+
|        | POST     | api/login                                                |                                   | AppHttpControllersAPIUserController@login  
| api        |
|        | GET|HEAD | oauth/authorize                                          | passport.authorizations.authorize | LaravelPassportHttpControllersAuthorizationController@authorize       | web,auth   |
|        | DELETE   | oauth/authorize                                          | passport.authorizations.deny      | LaravelPassportHttpControllersDenyAuthorizationController@deny        | web,auth   |
|        | POST     | oauth/authorize                                          | passport.authorizations.approve   | LaravelPassportHttpControllersApproveAuthorizationController@approve  | web,auth   |
|        | POST     | oauth/clients                                            | passport.clients.store            | LaravelPassportHttpControllersClientController@store                  | web,auth   |
|        | GET|HEAD | oauth/clients                                            | passport.clients.index            | LaravelPassportHttpControllersClientController@forUser                | web,auth   |
|        | PUT      | oauth/clients/{client_id}                                | passport.clients.update           | LaravelPassportHttpControllersClientController@update                 | web,auth   |
|        | DELETE   | oauth/clients/{client_id}                                | passport.clients.destroy          | LaravelPassportHttpControllersClientController@destroy                | web,auth   |
|        | POST     | oauth/personal-access-tokens                             | passport.personal.tokens.store    | LaravelPassportHttpControllersPersonalAccessTokenController@store     | web,auth   |
|        | GET|HEAD | oauth/personal-access-tokens                             | passport.personal.tokens.index    | LaravelPassportHttpControllersPersonalAccessTokenController@forUser   | web,auth   |
|        | DELETE   | oauth/personal-access-tokens/{token_id}                  | passport.personal.tokens.destroy  | LaravelPassportHttpControllersPersonalAccessTokenController@destroy   | web,auth   |
|        | GET|HEAD | oauth/scopes                                             | passport.scopes.index             | LaravelPassportHttpControllersScopeController@all                     | web,auth   |
|        | POST     | oauth/token                                              | passport.token                    | LaravelPassportHttpControllersAccessTokenController@issueToken        | throttle   |
|        | POST     | oauth/token/refresh                                      | passport.token.refresh            | LaravelPassportHttpControllersTransientTokenController@refresh        | web,auth   |
|        | GET|HEAD | oauth/tokens                                             | passport.tokens.index             | LaravelPassportHttpControllersAuthorizedAccessTokenController@forUser | web,auth   |
|        | DELETE   | oauth/tokens/{token_id}                                  | passport.tokens.destroy           | LaravelPassportHttpControllersAuthorizedAccessTokenController@destroy | web,auth   |
|        | POST     | telescope/telescope-api/cache                            |                                   | LaravelTelescopeHttpControllersCacheController@index                  | telescope  |
|        | GET|HEAD | telescope/telescope-api/cache/{telescopeEntryId}         |                                   | LaravelTelescopeHttpControllersCacheController@show                   | telescope  |
|        | POST     | telescope/telescope-api/commands                         |                                   | LaravelTelescopeHttpControllersCommandsController@index               | telescope  |
|        | GET|HEAD | telescope/telescope-api/commands/{telescopeEntryId}      |                                   | LaravelTelescopeHttpControllersCommandsController@show                | telescope  |
|        | POST     | telescope/telescope-api/dumps                            |                                   | LaravelTelescopeHttpControllersDumpController@index                   | telescope  |
|        | POST     | telescope/telescope-api/events                           |                                   | LaravelTelescopeHttpControllersEventsController@index                 | telescope  |
|        | GET|HEAD | telescope/telescope-api/events/{telescopeEntryId}        |                                   | LaravelTelescopeHttpControllersEventsController@show                  | telescope  |
|        | POST     | telescope/telescope-api/exceptions                       |                                   | LaravelTelescopeHttpControllersExceptionController@index              | telescope  |
|        | PUT      | telescope/telescope-api/exceptions/{telescopeEntryId}    |                                   | LaravelTelescopeHttpControllersExceptionController@update             | telescope  |
|        | GET|HEAD | telescope/telescope-api/exceptions/{telescopeEntryId}    |                                   | LaravelTelescopeHttpControllersExceptionController@show               | telescope  |
|        | POST     | telescope/telescope-api/gates                            |                                   | LaravelTelescopeHttpControllersGatesController@index                  | telescope  |
|        | GET|HEAD | telescope/telescope-api/gates/{telescopeEntryId}         |                                   | LaravelTelescopeHttpControllersGatesController@show                   | telescope  |
|        | POST     | telescope/telescope-api/jobs                             |                                   | LaravelTelescopeHttpControllersQueueController@index                  | telescope  |
|        | GET|HEAD | telescope/telescope-api/jobs/{telescopeEntryId}          |                                   | LaravelTelescopeHttpControllersQueueController@show                   | telescope  |
|        | POST     | telescope/telescope-api/logs                             |                                   | LaravelTelescopeHttpControllersLogController@index                    | telescope  |
|        | GET|HEAD | telescope/telescope-api/logs/{telescopeEntryId}          |                                   | LaravelTelescopeHttpControllersLogController@show                     | telescope  |
|        | POST     | telescope/telescope-api/mail                             |                                   | LaravelTelescopeHttpControllersMailController@index                   | telescope  |
|        | GET|HEAD | telescope/telescope-api/mail/{telescopeEntryId}          |                                   | LaravelTelescopeHttpControllersMailController@show                    | telescope  |
|        | GET|HEAD | telescope/telescope-api/mail/{telescopeEntryId}/download |                                   | LaravelTelescopeHttpControllersMailEmlController@show                 | telescope  |
|        | GET|HEAD | telescope/telescope-api/mail/{telescopeEntryId}/preview  |                                   | LaravelTelescopeHttpControllersMailHtmlController@show                | telescope  |
|        | POST     | telescope/telescope-api/models                           |                                   | LaravelTelescopeHttpControllersModelsController@index                 | telescope  |
|        | GET|HEAD | telescope/telescope-api/models/{telescopeEntryId}        |                                   | LaravelTelescopeHttpControllersModelsController@show                  | telescope  |
|        | POST     | telescope/telescope-api/monitored-tags                   |                                   | LaravelTelescopeHttpControllersMonitoredTagController@store           | telescope  |
|        | GET|HEAD | telescope/telescope-api/monitored-tags                   |                                   | LaravelTelescopeHttpControllersMonitoredTagController@index           | telescope  |
|        | POST     | telescope/telescope-api/monitored-tags/delete            |                                   | LaravelTelescopeHttpControllersMonitoredTagController@destroy         | telescope  |
|        | POST     | telescope/telescope-api/notifications                    |                                   | LaravelTelescopeHttpControllersNotificationsController@index          | telescope  |
|        | GET|HEAD | telescope/telescope-api/notifications/{telescopeEntryId} |                                   | LaravelTelescopeHttpControllersNotificationsController@show           | telescope  |
|        | POST     | telescope/telescope-api/queries                          |                                   | LaravelTelescopeHttpControllersQueriesController@index                | telescope  |
|        | GET|HEAD | telescope/telescope-api/queries/{telescopeEntryId}       |                                   | LaravelTelescopeHttpControllersQueriesController@show                 | telescope  |
|        | POST     | telescope/telescope-api/redis                            |                                   | LaravelTelescopeHttpControllersRedisController@index                  | telescope  |
|        | GET|HEAD | telescope/telescope-api/redis/{telescopeEntryId}         |                                   | LaravelTelescopeHttpControllersRedisController@show                   | telescope  |
|        | POST     | telescope/telescope-api/requests                         |                                   | LaravelTelescopeHttpControllersRequestsController@index               | telescope  |
|        | GET|HEAD | telescope/telescope-api/requests/{telescopeEntryId}      |                                   | LaravelTelescopeHttpControllersRequestsController@show                | telescope  |
|        | POST     | telescope/telescope-api/schedule                         |                                   | LaravelTelescopeHttpControllersScheduleController@index               | telescope  |
|        | GET|HEAD | telescope/telescope-api/schedule/{telescopeEntryId}      |                                   | LaravelTelescopeHttpControllersScheduleController@show                | telescope  |
|        | POST     | telescope/telescope-api/toggle-recording                 |                                   | LaravelTelescopeHttpControllersRecordingController@toggle             | telescope  |
|        | POST     | telescope/telescope-api/views                            |                                   | LaravelTelescopeHttpControllersViewsController@index                  | telescope  |
|        | GET|HEAD | telescope/telescope-api/views/{telescopeEntryId}         |                                   | LaravelTelescopeHttpControllersViewsController@show                   | telescope  |
|        | GET|HEAD | telescope/{view?}                                        | telescope                         | LaravelTelescopeHttpControllersHomeController@index                   | telescope  |
+--------+----------+----------------------------------------------------------+-----------------------------------+---------------------------------------------------------------------------+------------+

新路由丢失可能是因为Laravel正在为缓存的路由提供服务。验证这一点的一种快速方法是运行php artisan route:list

如果路线不在那里,那就证实了这一理论。解决方案是运行php artisan route:clear,它告诉laravel清除路由缓存,这样就可以从路由文件中新获取路由。

完成此操作后,再次运行php artisan route:list。丢失的路线现在应该显示出来并且可以访问。

相关内容

最新更新