【发布时间】:2020-08-15 08:03:12
【问题描述】:
更新:
运行php artisan route:clear 解决了这个问题,但只是部分解决了。
在我运行命令并成功使用 API 后,我调用的路由再次从路由列表缓存中消失,它迫使我再次运行命令。我不知道为什么会这样。
我正在尝试使用我设置的 Laravel API,但由于某种原因我只能使用三个可用路由之一,另外两个丢弃 404。
Route::post('/login', 'API\UserController@login'); //this works
Route::group(['middleware' => ['auth:api']], function () {
Route::post('/roles/all', 'API\RoleController@getAll'); //this doesn't work - error 404
Route::post('/permissions/all', 'API\PermissionController@getAll'); //this doesn't work - error 404
});
路由指向正确的位置,函数存在,并且我通过 Postman 进行的调用具有正确的参数(url 示例:'http://localhost:8000/api/roles/all'、GET 调用、授权字段中的身份验证令牌)。
我将路由放在中间件内部还是外部也没关系(以防它与 oauth2 令牌或中间件本身有问题有关)。
这是我尝试调用的函数之一的示例:
public function getAll()
{
$role = Role::all();
return response()->json(['role' => $role], 200);
}
编辑:这是 php artisan route:list 的输出
+--------+----------+----------------------------------------------------------+-----------------------------------+---------------------------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action
| Middleware |
+--------+----------+----------------------------------------------------------+-----------------------------------+---------------------------------------------------------------------------+------------+
| | POST | api/login | | App\Http\Controllers\API\UserController@login
| api |
| | GET|HEAD | oauth/authorize | passport.authorizations.authorize | Laravel\Passport\Http\Controllers\AuthorizationController@authorize | web,auth |
| | DELETE | oauth/authorize | passport.authorizations.deny | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny | web,auth |
| | POST | oauth/authorize | passport.authorizations.approve | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve | web,auth |
| | POST | oauth/clients | passport.clients.store | Laravel\Passport\Http\Controllers\ClientController@store | web,auth |
| | GET|HEAD | oauth/clients | passport.clients.index | Laravel\Passport\Http\Controllers\ClientController@forUser | web,auth |
| | PUT | oauth/clients/{client_id} | passport.clients.update | Laravel\Passport\Http\Controllers\ClientController@update | web,auth |
| | DELETE | oauth/clients/{client_id} | passport.clients.destroy | Laravel\Passport\Http\Controllers\ClientController@destroy | web,auth |
| | POST | oauth/personal-access-tokens | passport.personal.tokens.store | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store | web,auth |
| | GET|HEAD | oauth/personal-access-tokens | passport.personal.tokens.index | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser | web,auth |
| | DELETE | oauth/personal-access-tokens/{token_id} | passport.personal.tokens.destroy | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy | web,auth |
| | GET|HEAD | oauth/scopes | passport.scopes.index | Laravel\Passport\Http\Controllers\ScopeController@all | web,auth |
| | POST | oauth/token | passport.token | Laravel\Passport\Http\Controllers\AccessTokenController@issueToken | throttle |
| | POST | oauth/token/refresh | passport.token.refresh | Laravel\Passport\Http\Controllers\TransientTokenController@refresh | web,auth |
| | GET|HEAD | oauth/tokens | passport.tokens.index | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | web,auth |
| | DELETE | oauth/tokens/{token_id} | passport.tokens.destroy | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | web,auth |
| | POST | telescope/telescope-api/cache | | Laravel\Telescope\Http\Controllers\CacheController@index | telescope |
| | GET|HEAD | telescope/telescope-api/cache/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\CacheController@show | telescope |
| | POST | telescope/telescope-api/commands | | Laravel\Telescope\Http\Controllers\CommandsController@index | telescope |
| | GET|HEAD | telescope/telescope-api/commands/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\CommandsController@show | telescope |
| | POST | telescope/telescope-api/dumps | | Laravel\Telescope\Http\Controllers\DumpController@index | telescope |
| | POST | telescope/telescope-api/events | | Laravel\Telescope\Http\Controllers\EventsController@index | telescope |
| | GET|HEAD | telescope/telescope-api/events/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\EventsController@show | telescope |
| | POST | telescope/telescope-api/exceptions | | Laravel\Telescope\Http\Controllers\ExceptionController@index | telescope |
| | PUT | telescope/telescope-api/exceptions/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\ExceptionController@update | telescope |
| | GET|HEAD | telescope/telescope-api/exceptions/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\ExceptionController@show | telescope |
| | POST | telescope/telescope-api/gates | | Laravel\Telescope\Http\Controllers\GatesController@index | telescope |
| | GET|HEAD | telescope/telescope-api/gates/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\GatesController@show | telescope |
| | POST | telescope/telescope-api/jobs | | Laravel\Telescope\Http\Controllers\QueueController@index | telescope |
| | GET|HEAD | telescope/telescope-api/jobs/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\QueueController@show | telescope |
| | POST | telescope/telescope-api/logs | | Laravel\Telescope\Http\Controllers\LogController@index | telescope |
| | GET|HEAD | telescope/telescope-api/logs/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\LogController@show | telescope |
| | POST | telescope/telescope-api/mail | | Laravel\Telescope\Http\Controllers\MailController@index | telescope |
| | GET|HEAD | telescope/telescope-api/mail/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\MailController@show | telescope |
| | GET|HEAD | telescope/telescope-api/mail/{telescopeEntryId}/download | | Laravel\Telescope\Http\Controllers\MailEmlController@show | telescope |
| | GET|HEAD | telescope/telescope-api/mail/{telescopeEntryId}/preview | | Laravel\Telescope\Http\Controllers\MailHtmlController@show | telescope |
| | POST | telescope/telescope-api/models | | Laravel\Telescope\Http\Controllers\ModelsController@index | telescope |
| | GET|HEAD | telescope/telescope-api/models/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\ModelsController@show | telescope |
| | POST | telescope/telescope-api/monitored-tags | | Laravel\Telescope\Http\Controllers\MonitoredTagController@store | telescope |
| | GET|HEAD | telescope/telescope-api/monitored-tags | | Laravel\Telescope\Http\Controllers\MonitoredTagController@index | telescope |
| | POST | telescope/telescope-api/monitored-tags/delete | | Laravel\Telescope\Http\Controllers\MonitoredTagController@destroy | telescope |
| | POST | telescope/telescope-api/notifications | | Laravel\Telescope\Http\Controllers\NotificationsController@index | telescope |
| | GET|HEAD | telescope/telescope-api/notifications/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\NotificationsController@show | telescope |
| | POST | telescope/telescope-api/queries | | Laravel\Telescope\Http\Controllers\QueriesController@index | telescope |
| | GET|HEAD | telescope/telescope-api/queries/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\QueriesController@show | telescope |
| | POST | telescope/telescope-api/redis | | Laravel\Telescope\Http\Controllers\RedisController@index | telescope |
| | GET|HEAD | telescope/telescope-api/redis/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\RedisController@show | telescope |
| | POST | telescope/telescope-api/requests | | Laravel\Telescope\Http\Controllers\RequestsController@index | telescope |
| | GET|HEAD | telescope/telescope-api/requests/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\RequestsController@show | telescope |
| | POST | telescope/telescope-api/schedule | | Laravel\Telescope\Http\Controllers\ScheduleController@index | telescope |
| | GET|HEAD | telescope/telescope-api/schedule/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\ScheduleController@show | telescope |
| | POST | telescope/telescope-api/toggle-recording | | Laravel\Telescope\Http\Controllers\RecordingController@toggle | telescope |
| | POST | telescope/telescope-api/views | | Laravel\Telescope\Http\Controllers\ViewsController@index | telescope |
| | GET|HEAD | telescope/telescope-api/views/{telescopeEntryId} | | Laravel\Telescope\Http\Controllers\ViewsController@show | telescope |
| | GET|HEAD | telescope/{view?} | telescope | Laravel\Telescope\Http\Controllers\HomeController@index | telescope |
+--------+----------+----------------------------------------------------------+-----------------------------------+---------------------------------------------------------------------------+------------+
【问题讨论】:
-
在终端运行
php artisan route:list,查看可用路线列表 -
你能用命令的输出更新你的问题吗:
php artisan route:list -
完成,当登录出现时,输出中似乎缺少两条路由。
-
那你明白为什么它会返回 404。所有路由都在同一个路由文件中吗?另外,如果出现丢失的路由,请执行
php artisan route:clear并再次运行 list 命令 -
php artisan route:clear成功了,它们现在出现在路线列表中,我可以使用它们!您能否将此作为答案发布,以便我进行验证?