更新:运行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
。丢失的路线现在应该显示出来并且可以访问。