Geeks, please accept the hero post of 2021 Microsoft x Intel hacking contest>>>
Today, we encountered a problem. We configured the route in routes/web.php, but we were unable to access the route. We kept reporting 404
Route::resource('gift_packs', 'GiftPacksController', ['only' => ['index', 'show', 'create', 'store', 'update', 'edit', 'destroy']]);
Route::get('gift_packs/test', 'GiftPacksController@test')->name('gift_packs.test');
Then I modify the render () method in the app/exceptions/handler.php file
public function render($request, Exception $exception)
{
dd($exception);
return parent::render($request, $exception);
}
Print out the exception:
No query results for model [App\Models\GiftPack].
First, through PHP artisan route:list View routing list
| Domain | Method | URI | Name |
| | GET|HEAD | gift_packs/{gift_pack} | gift_packs.show |
| | DELETE | gift_packs/{gift_pack} | gift_packs.destroy |
| | PUT|PATCH | gift_packs/{gift_pack} | gift_packs.update |
| | GET|HEAD | gift_packs/{gift_pack}/edit | gift_packs.edit |
| | GET|HEAD | gift_packs/test | gift_packs.test |
The reason is that laravel routing access detection is from top to bottom
For the same path, gift_ packs/{gift_ Pack} and gift_ Pack/test, when we visit/Gift_ When packages/test, route gift_ packs/{gift_ Pack} has been parsed
The string ‘test’ could not get the data of the Giftpack model, so an error was reported
The solution is to modify the location of the routing configuration
Route::get('gift_packs/test', 'GiftPacksController@test')->name('gift_packs.test');
Route::resource('gift_packs', 'GiftPacksController', ['only' => ['index', 'show', 'create', 'store', 'update', 'edit', 'destroy']]);
That’s it