Laravel form submission sending to the wrong route? - laravel

I have a very simple form:
{!! Form::open(['route' => ['complete.order']]) !!}
{!! Form::hidden('date', \Carbon\Carbon::now()->format('F j, Y ')) !!}
{!! Form::hidden('web_token', $order->web_token) !!}
{!! Form::submit('Place this order', ['class'=>'btn btn-primary']) !!}
{!! Form::close() !!}
When I visit the page, this renders as follows:
<form method="POST" action="http://site.localhost/place-order" accept-charset="UTF-8">
<input name="_token" type="hidden" value="kc6d4XoZ78RvJNtQbN8lavpLP7e1lI7rTGBvbeIP">
<input name="date" type="hidden" value="December 21, 2018 ">
<input name="id" type="hidden" value="15">
<input class="btn btn-primary" type="submit" value="Place this order">
</form>
Here are the relevant routes:
Route::get('/orders/form', 'OrdersController#viewform')->name('orderform');
Route::post('/orders/review', 'OrdersController#review')->name('orders.review');
Route::post('/place-order', 'OrdersController#store')->name('complete.order');
Route::resource('/orders', 'OrdersController', ['except'=>['edit', 'update', 'destroy', 'show', 'store']])->middleware('auth');
Route::get('/orders/{order}', 'OrdersController#show')->name('orders.show');
When I click on the submit button, I'm directed to site.localhost/orders/review, which according to the debug bar is being passed to as a GET request, not POST.
I can't figure out why this is happening. The form should be going to site.localhost/place-order, which currently just outputs return('place') for testing.
The code in OrdersController#show currently outputs return('show'). I've done the same across all of the OrdersController methods for testing.
Adding php artisan route output
+--------+-----------+-------------------------------+-----------------------+------------------------------------------------------------------------+------------------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------------+-----------------------+------------------------------------------------------------------------+------------------------------------------------------+
| | GET|HEAD | / | | App\Http\Controllers\HomeController#index | web,auth |
| | GET|HEAD | _debugbar/assets/javascript | debugbar.assets.js | Barryvdh\Debugbar\Controllers\AssetController#js | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | _debugbar/assets/stylesheets | debugbar.assets.css | Barryvdh\Debugbar\Controllers\AssetController#css | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | DELETE | _debugbar/cache/{key}/{tags?} | debugbar.cache.delete | Barryvdh\Debugbar\Controllers\CacheController#delete | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | _debugbar/clockwork/{id} | debugbar.clockwork | Barryvdh\Debugbar\Controllers\OpenHandlerController#clockwork | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | _debugbar/open | debugbar.openhandler | Barryvdh\Debugbar\Controllers\OpenHandlerController#handle | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | confirm-account/{token} | | App\Http\Controllers\UserController#create | web |
| | GET|HEAD | home | home | App\Http\Controllers\HomeController#index | web,auth |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController#showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController#login | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController#logout | web |
| | GET|HEAD | my-account | my-account.index | App\Http\Controllers\UserController#index | web,auth |
| | POST | my-account | my-account.store | App\Http\Controllers\UserController#store | web,auth |
| | GET|HEAD | my-account/create | my-account.create | App\Http\Controllers\UserController#create | web,auth |
| | PUT|PATCH | my-account/{my_account} | my-account.update | App\Http\Controllers\UserController#update | web,auth |
| | DELETE | my-account/{my_account} | my-account.destroy | App\Http\Controllers\UserController#destroy | web,auth |
| | GET|HEAD | my-account/{my_account} | my-account.show | App\Http\Controllers\UserController#show | web,auth |
| | GET|HEAD | my-account/{my_account}/edit | my-account.edit | App\Http\Controllers\UserController#edit | web,auth |
| | POST | orders | orders.store | App\Http\Controllers\OrdersController#store | web,auth |
| | GET|HEAD | orders | orders.index | App\Http\Controllers\OrdersController#index | web,auth |
| | GET|HEAD | orders/create | orders.create | App\Http\Controllers\OrdersController#create | web,auth |
| | GET|HEAD | orders/form | orderform | App\Http\Controllers\OrdersController#viewform | web |
| | POST | orders/review | orders.review | App\Http\Controllers\OrdersController#review | web |
| | GET|HEAD | orders/{order} | orders.show | App\Http\Controllers\OrdersController#show | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController#reset | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController#showResetForm | web,guest |
| | POST | place-order | complete.order | App\Http\Controllers\OrdersController#store | web |
| | POST | register | | App\Http\Controllers\Auth\RegisterController#register | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm | web,guest |
| | POST | user/store | user.store | App\Http\Controllers\UserController#store | web |
+--------+-----------+-------------------------------+-----------------------+------------------------------------------------------------------------+------------------------------------------------------+

Okay, I'm a complete and utter idiot.
The problem was that I was using a custom request for validation, which this route didn't meet. So it was actually returning the page back with errors, but since I didn't realize this it wasn't showing any errors.

Your problem is generated because you are using Route::resource, this route defines, index, create, store, show, edit, update and destroy routes for your controller and you're trying to overwrite the store route:
Route::post('/place-order', 'OrdersController#store')->name('complete.order');
You can use change your form code like this:
{!! Form::open(['route' => ['orders.store']]) !!}
Or you can create a new function in your controller:
public function newfucntion(Request $request)
{
//All your code here
}
Then create the new route:
Route::post('/place-order', 'OrdersController#newFunction')->name('complete.order');
And then change your form like this:
{!! Form::open(['route' => ['complete.order']]) !!}

Related

Laravel route undefined but it is clearly defined

I am having problems getting some routes to work. I have clearly declared some routes that just don't show up in php artisan route:list, even after clearing the cache.
Since I think this may be related to another line not being correct, I have pasted the entire routes file here. All the admin routes are working, but some "pro" and some "shop" routes are missing completely! There are several missing, so I will not list them all. I am out of thoughts as to how this is happening.
Auth::routes();
Route::prefix('cms')->middleware(['role:admin'])->namespace('Admin')->name('cms.admin.')->group(function () {
Route::get('', 'CmsController#index')->name('index');
Route::get('instellingen', 'CmsController#getSetting')->name('setting.get');
Route::match(['put', 'patch'], 'instellingen', 'CmsController#updateSetting')->name('setting.update');
Route::resource('coaches', 'ProController')->names('pro');
Route::resource('winkels', 'ShopController')->names('shop');
Route::resource('adviezen', 'AdviceController')->names('advice');
Route::resource('notificaties', 'NotificationController')->names('notification');
});
Route::prefix('account')->name('account.')->group(function () {
Route::middleware(['role:shop'])->namespace('Shop')->name('shop.')->group(function () {
Route::get('', 'AccountController#index')->name('index');
Route::get('instellingen', 'AccountController#getSetting')->name('setting.get');
Route::match(['put', 'patch'], 'instellingen', 'AccountController#postSetting')->name('setting.post');
Route::get('profiel', 'AccountController#getProfile')->name('profile.get');
Route::match(['put', 'patch'], 'profiel', 'AccountController#postProfile')->name('profile.post');
Route::get('coaches', 'AccountController#getPro')->name('pro.get');
Route::match(['put', 'patch'], 'coaches', 'AccountController#postPro')->name('pro.post');
Route::resource('adviezen', 'AdviceController')->names('advice');
});
Route::middleware(['role:pro'])->namespace('Pro')->name('pro.')->group(function () {
Route::get('', 'AccountController#index')->name('index');
Route::get('profiel', 'AccountController#getProfile')->name('profile.get');
Route::match(['put', 'patch', 'delete'], 'profiel', 'AccountController#postProfile')->name('profile.post');
Route::get('winkel', 'AccountController#getShop')->name('shop.get');
Route::match(['post', 'delete'], 'winkel', 'AccountController#postShop')->name('shop.post');
Route::get('postvak', 'AccountController#getNotification')->name('notification.get');
Route::post('postvak', 'AccountController#postNotification')->name('notification.post');
Route::resource('adviezen', 'AdviceController')->names('advice');
});
});
Route::get('', 'SiteController#index')->name('site.index');
Result when printing the php artisan route:list -c (Yes, I know this is quite a lot of text, but I think it is necessary to see the complete picture and might help in the solving of this particular problem)
+------------------+------------------------------------+------------------------------------------------------------------------+
| Method | URI | Action |
+------------------+------------------------------------+------------------------------------------------------------------------+
| GET|HEAD | / | App\Http\Controllers\SiteController#index |
| GET|HEAD | _debugbar/assets/javascript | Barryvdh\Debugbar\Controllers\AssetController#js |
| GET|HEAD | _debugbar/assets/stylesheets | Barryvdh\Debugbar\Controllers\AssetController#css |
| DELETE | _debugbar/cache/{key}/{tags?} | Barryvdh\Debugbar\Controllers\CacheController#delete |
| GET|HEAD | _debugbar/clockwork/{id} | Barryvdh\Debugbar\Controllers\OpenHandlerController#clockwork |
| GET|HEAD | _debugbar/open | Barryvdh\Debugbar\Controllers\OpenHandlerController#handle |
| GET|HEAD | _debugbar/telescope/{id} | Barryvdh\Debugbar\Controllers\TelescopeController#show |
| GET|HEAD | account | App\Http\Controllers\Pro\AccountController#index |
| POST | account/adviezen | App\Http\Controllers\Pro\AdviceController#store |
| GET|HEAD | account/adviezen | App\Http\Controllers\Pro\AdviceController#index |
| GET|HEAD | account/adviezen/create | App\Http\Controllers\Pro\AdviceController#create |
| PUT|PATCH | account/adviezen/{adviezen} | App\Http\Controllers\Pro\AdviceController#update |
| GET|HEAD | account/adviezen/{adviezen} | App\Http\Controllers\Pro\AdviceController#show |
| DELETE | account/adviezen/{adviezen} | App\Http\Controllers\Pro\AdviceController#destroy |
| GET|HEAD | account/adviezen/{adviezen}/edit | App\Http\Controllers\Pro\AdviceController#edit |
| PUT|PATCH | account/coaches | App\Http\Controllers\Shop\AccountController#postPro |
| GET|HEAD | account/coaches | App\Http\Controllers\Shop\AccountController#getPro |
| GET|HEAD | account/instellingen | App\Http\Controllers\Shop\AccountController#getSetting |
| PUT|PATCH | account/instellingen | App\Http\Controllers\Shop\AccountController#postSetting |
| GET|HEAD | account/postvak | App\Http\Controllers\Pro\AccountController#getNotification |
| POST | account/postvak | App\Http\Controllers\Pro\AccountController#postNotification |
| PUT|PATCH|DELETE | account/profiel | App\Http\Controllers\Pro\AccountController#postProfile |
| PUT|PATCH | account/profiel | App\Http\Controllers\Shop\AccountController#postProfile |
| GET|HEAD | account/profiel | App\Http\Controllers\Pro\AccountController#getProfile |
| GET|HEAD | account/winkel | App\Http\Controllers\Pro\AccountController#getShop |
| POST|DELETE | account/winkel | App\Http\Controllers\Pro\AccountController#postShop |
| GET|HEAD | api/user | Closure |
| GET|HEAD | cms | App\Http\Controllers\Admin\CmsController#index |
| GET|HEAD | cms/adviezen | App\Http\Controllers\Admin\AdviceController#index |
| POST | cms/adviezen | App\Http\Controllers\Admin\AdviceController#store |
| GET|HEAD | cms/adviezen/create | App\Http\Controllers\Admin\AdviceController#create |
| PUT|PATCH | cms/adviezen/{adviezen} | App\Http\Controllers\Admin\AdviceController#update |
| DELETE | cms/adviezen/{adviezen} | App\Http\Controllers\Admin\AdviceController#destroy |
| GET|HEAD | cms/adviezen/{adviezen} | App\Http\Controllers\Admin\AdviceController#show |
| GET|HEAD | cms/adviezen/{adviezen}/edit | App\Http\Controllers\Admin\AdviceController#edit |
| GET|HEAD | cms/coaches | App\Http\Controllers\Admin\ProController#index |
| POST | cms/coaches | App\Http\Controllers\Admin\ProController#store |
| GET|HEAD | cms/coaches/create | App\Http\Controllers\Admin\ProController#create |
| GET|HEAD | cms/coaches/{coach} | App\Http\Controllers\Admin\ProController#show |
| DELETE | cms/coaches/{coach} | App\Http\Controllers\Admin\ProController#destroy |
| PUT|PATCH | cms/coaches/{coach} | App\Http\Controllers\Admin\ProController#update |
| GET|HEAD | cms/coaches/{coach}/edit | App\Http\Controllers\Admin\ProController#edit |
| PUT|PATCH | cms/instellingen | App\Http\Controllers\Admin\CmsController#updateSetting |
| GET|HEAD | cms/instellingen | App\Http\Controllers\Admin\CmsController#getSetting |
| GET|HEAD | cms/notificaties | App\Http\Controllers\Admin\NotificationController#index |
| POST | cms/notificaties | App\Http\Controllers\Admin\NotificationController#store |
| GET|HEAD | cms/notificaties/create | App\Http\Controllers\Admin\NotificationController#create |
| GET|HEAD | cms/notificaties/{notificaty} | App\Http\Controllers\Admin\NotificationController#show |
| PUT|PATCH | cms/notificaties/{notificaty} | App\Http\Controllers\Admin\NotificationController#update |
| DELETE | cms/notificaties/{notificaty} | App\Http\Controllers\Admin\NotificationController#destroy |
| GET|HEAD | cms/notificaties/{notificaty}/edit | App\Http\Controllers\Admin\NotificationController#edit |
| POST | cms/winkels | App\Http\Controllers\Admin\ShopController#store |
| GET|HEAD | cms/winkels | App\Http\Controllers\Admin\ShopController#index |
| GET|HEAD | cms/winkels/create | App\Http\Controllers\Admin\ShopController#create |
| GET|HEAD | cms/winkels/{winkel} | App\Http\Controllers\Admin\ShopController#show |
| DELETE | cms/winkels/{winkel} | App\Http\Controllers\Admin\ShopController#destroy |
| PUT|PATCH | cms/winkels/{winkel} | App\Http\Controllers\Admin\ShopController#update |
| GET|HEAD | cms/winkels/{winkel}/edit | App\Http\Controllers\Admin\ShopController#edit |
| GET|HEAD | login | App\Http\Controllers\Auth\LoginController#showLoginForm |
| POST | login | App\Http\Controllers\Auth\LoginController#login |
| POST | logout | App\Http\Controllers\Auth\LoginController#logout |
| POST | password/confirm | App\Http\Controllers\Auth\ConfirmPasswordController#confirm |
| GET|HEAD | password/confirm | App\Http\Controllers\Auth\ConfirmPasswordController#showConfirmForm |
| POST | password/email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail |
| GET|HEAD | password/reset | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm |
| POST | password/reset | App\Http\Controllers\Auth\ResetPasswordController#reset |
| GET|HEAD | password/reset/{token} | App\Http\Controllers\Auth\ResetPasswordController#showResetForm |
| POST | register | App\Http\Controllers\Auth\RegisterController#register |
| GET|HEAD | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm |
+------------------+------------------------------------+------------------------------------------------------------------------+
It is not a syntax error, since my IDE does not give an error, so I am thinking it might be a logical one or something I am completely missing...
Any help would be much appreciated.
Kind regards,
Niels
Although the result was pretty embarrassing;
What I did was register multiple routes with the same URI and method. Although they had different namespaces and names, it conflicted.
Fixed by prefixing the URI in the 2 separate groups
Thanks to user lagbox for the answer.

Laravel middleware Auth

good Morning,
I separate my two guards in Laravel. I would like if someone registers via the Guard "club" he can only access the pages within the Route Group "club", otherwise 403 should come.
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', 'TextController#GetStartseite');
Route::get('/info', function () {
return view('info');
});
Auth::routes();
Route::get('/home', 'TextController#GetWelcome')->name('home');
Route::get('/admin/bund', 'BundController#index')->middleware('auth');
Route::get('/meinProfil', 'UserProfilController#index')->middleware('auth');
Route::post('/meinProfil', 'UserProfilController#update')->middleware('auth');
Route::resource('/meineAusbildung', 'EducationController')->middleware('auth');
Route::POST('/meineAusbildung/delete', 'EducationController#destroy')->middleware('auth');
//Waffen
Route::resource('/meineWaffen', 'WeaponController')->middleware('auth');
Route::POST('/meineWaffen/show', 'WeaponController#show')->middleware('auth');
Route::POST('/meineWaffen/edit', 'WeaponController#update')->middleware('auth');
Route::POST('/meineWaffen/getTable', 'WeaponController#getTableWeapon')->middleware('auth');
Route::POST('/meineWaffen/getDisziTable', 'WeaponController#getDisziWaffe')->middleware('auth');
Route::POST('/meineWaffen/addDiszi', 'WeaponController#addDiziWaffe')->middleware('auth');
Route::POST('/meineWaffen/delDiszi', 'WeaponController#delDisziWaffe')->middleware('auth');
Route::POST('/meineWaffen/DisziDrop', 'WeaponController#getDisziDropDown')->middleware('auth');
Route::get('/meineVereine', 'VereinController#index')->middleware('auth');
//Route::post('/meineVereine/{VereinId}/attach' ,'VereinController#addVerein')->middleware('auth');
Route::post('/meineVereine' ,'VereinController#addVerein')->middleware('auth');
Route::post('/meineVereineDel' ,'VereinController#removeVerein')->middleware('auth');
Route::get('/Zeiterfassen', 'RecordShootingTimeController#index')->middleware('auth');
Route::POST('/Zeiterfassen/waffenDiszi', 'RecordShootingTimeController#getDisziWaffenDropDown')->middleware('auth');
Route::POST('/Zeiterfassen/store', 'RecordShootingTimeController#store')->middleware('auth');
Route::POST('/Zeiterfassen/openEntrys', 'RecordShootingTimeController#getopenEntrys')->middleware('auth');
Route::POST('/Zeiterfassen/show', 'RecordShootingTimeController#show')->middleware('auth');
Route::POST('/Zeiterfassen/update', 'RecordShootingTimeController#update')->middleware('auth');
Route::POST('/Zeiterfassen/delete', 'RecordShootingTimeController#destroy')->middleware('auth');
Route::get('/meinSchiessbuch', 'ShootingbookController#index')->middleware('auth');
Route::POST('/meinSchiessbuch/getTable', 'ShootingbookController#getShootingbook')->middleware('auth');
Route::POST('/meinSchiessbuch/freigabe', 'ShootingbookController#clubfreigabe')->middleware('auth');
Route::POST('/meinSchiessbuch/update', 'ShootingbookController#store')->middleware('auth');
//Vereine
Route::get('verein/', 'TextController#GetClubStartseite')->name('verein/');
Route::group(['namespace' => 'Club'] , function(){
/****Club Login Route*****/
Route::get('verein/login', 'Auth\LoginController#ClubshowLoginForm')->name('club.login');
Route::post('verein/login', 'Auth\LoginController#Clublogin');
Route::post('verein/logout', 'Auth\LoginController#Clublogout')->name('club.logout');
Route::get('verein/register', 'Auth\RegisterController#ClubshowRegistrationForm')->name('club.register');
Route::post('verein/register', 'Auth\RegisterController#register')->name('club.register');
});
Route::group(['middleware' => ['auth', 'club']], function() {
Route::get('verein/home', 'TextController#GetClubWelcome');
Route::get('/verein/unsereStaende', 'ShootingrangeController#index');
Route::POST('/verein/unsereStaende', 'ShootingrangeController#create');
Route::POST('/verein/unsereStaende/delete', 'ShootingrangeController#destroy');
Route::get('/verein/Schiessbuch', 'ShootingbookController#Clubindex');
Route::POST('/verein/Schiessbuch/getTable', 'ShootingbookController#getClubShootingbook');
Route::get('/verein/Genehmigung', 'ShootingbookController#ClubGenehmigung');
Route::POST('/verein/Genehmigung/getTable', 'ShootingbookController#getClubSBzurFreigabe');
Route::POST('/verein/Genehmigung/bestaetigung', 'ShootingbookController#clubbestaetigung');
Route::get('/verein/Profil', 'ClubProfilController#index');
Route::post('/verein/Profil', 'ClubProfilController#update');
Route::Get('/verein/Verband', 'VerbandController#index');
Route::Post('/verein/Verband', 'VerbandController#store');
Route::Post('/verein/Verband/delete', 'VerbandController#destroy');
Route::Get('/verein/Mitglieder', 'ClubController#index');
Route::POST('/verein/Mitglieder', 'ClubController#update');
});
// Route::get('verein/home', 'TextController#GetClubWelcome')->name('verein/home')->middleware('auth:club');
//
//
// Route::get('/verein/unsereStaende', 'ShootingrangeController#index')->middleware('auth:club');
// Route::POST('/verein/unsereStaende', 'ShootingrangeController#create')->middleware('auth:club');
// Route::POST('/verein/unsereStaende/delete', 'ShootingrangeController#destroy')->middleware('auth:club');
//
// Route::get('/verein/Schiessbuch', 'ShootingbookController#Clubindex')->middleware('auth:club');
// Route::POST('/verein/Schiessbuch/getTable', 'ShootingbookController#getClubShootingbook')->middleware('auth:club');
// Route::get('/verein/Genehmigung', 'ShootingbookController#ClubGenehmigung')->middleware('auth:club');
// Route::POST('/verein/Genehmigung/getTable', 'ShootingbookController#getClubSBzurFreigabe')->middleware('auth:club');
// Route::POST('/verein/Genehmigung/bestaetigung', 'ShootingbookController#clubbestaetigung')->middleware('auth:club');
//
// Route::get('/verein/Profil', 'ClubProfilController#index')->middleware('auth:club');
// Route::post('/verein/Profil', 'ClubProfilController#update')->middleware('auth:club');
//
// Route::Get('/verein/Verband', 'VerbandController#index')->middleware('auth:club');
// Route::Post('/verein/Verband', 'VerbandController#store')->middleware('auth:club');
// Route::Post('/verein/Verband/delete', 'VerbandController#destroy')->middleware('auth:club');
//
// Route::Get('/verein/Mitglieder', 'ClubController#index')->middleware('auth:club');
// Route::POST('/verein/Mitglieder', 'ClubController#update')->middleware('auth:club');
I have addes a Middleware "ClubMiddleware" an registered it to Kernel.php routeMiddleware Methode
<?php
namespace App\Http\Middleware;
use App\Club;
use App\User;
use Closure;
use Illuminate\Contracts\Auth\Guard;
class ClubMiddelware
{
/**
* The Guard implementation.
*
* #var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* #param Guard $auth
* #return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* #param \Illuminate\Http\Request $request
* #param \Closure $next
* #return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->getUser()->type !== "club") {
abort(403, 'Zugriff nicht erlaubt');
}
return $next($request);
}
}
php artisan route:list
+--------+-----------+----------------------------------------+-------------------------+----------------------------------------------------------------------------+----------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+----------------------------------------+-------------------------+----------------------------------------------------------------------------+----------------------+
| | GET|HEAD | / | | App\Http\Controllers\TextController#GetStartseite | web |
| | GET|HEAD | Zeiterfassen | | App\Http\Controllers\RecordShootingTimeController#index | web,auth |
| | POST | Zeiterfassen/delete | | App\Http\Controllers\RecordShootingTimeController#destroy | web,auth |
| | POST | Zeiterfassen/openEntrys | | App\Http\Controllers\RecordShootingTimeController#getopenEntrys | web,auth |
| | POST | Zeiterfassen/show | | App\Http\Controllers\RecordShootingTimeController#show | web,auth |
| | POST | Zeiterfassen/store | | App\Http\Controllers\RecordShootingTimeController#store | web,auth |
| | POST | Zeiterfassen/update | | App\Http\Controllers\RecordShootingTimeController#update | web,auth |
| | POST | Zeiterfassen/waffenDiszi | | App\Http\Controllers\RecordShootingTimeController#getDisziWaffenDropDown | web,auth |
| | GET|HEAD | admin/bund | | App\Http\Controllers\BundController#index | web,auth |
| | GET|HEAD | api/api/v1/bund | api.bund.getBundTable | App\Http\Controllers\BundController#getBundTable | api |
| | GET|HEAD | api/api/v1/getEduTable | api.Edu.getEduTable | App\Http\Controllers\EducationController#getEduTable | api |
| | GET|HEAD | api/api/v1/getmeinSchiessbuch | api.SB.getSBTable | App\Http\Controllers\ShootingbookController#getShootingbook | api |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | home | App\Http\Controllers\TextController#GetWelcome | web |
| | GET|HEAD | info | | Closure | web |
| | POST | login | | App\Http\Controllers\Auth\LoginController#login | web,guest,guest:club |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController#showLoginForm | web,guest,guest:club |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController#logout | web |
| | GET|HEAD | meinProfil | | App\Http\Controllers\UserProfilController#index | web,auth |
| | POST | meinProfil | | App\Http\Controllers\UserProfilController#update | web,auth |
| | GET|HEAD | meinSchiessbuch | | App\Http\Controllers\ShootingbookController#index | web,auth |
| | POST | meinSchiessbuch/freigabe | | App\Http\Controllers\ShootingbookController#clubfreigabe | web,auth |
| | POST | meinSchiessbuch/getTable | | App\Http\Controllers\ShootingbookController#getShootingbook | web,auth |
| | POST | meinSchiessbuch/update | | App\Http\Controllers\ShootingbookController#store | web,auth |
| | GET|HEAD | meineAusbildung | meineAusbildung.index | App\Http\Controllers\EducationController#index | web,auth |
| | POST | meineAusbildung | meineAusbildung.store | App\Http\Controllers\EducationController#store | web,auth |
| | GET|HEAD | meineAusbildung/create | meineAusbildung.create | App\Http\Controllers\EducationController#create | web,auth |
| | POST | meineAusbildung/delete | | App\Http\Controllers\EducationController#destroy | web,auth |
| | GET|HEAD | meineAusbildung/{meineAusbildung} | meineAusbildung.show | App\Http\Controllers\EducationController#show | web,auth |
| | DELETE | meineAusbildung/{meineAusbildung} | meineAusbildung.destroy | App\Http\Controllers\EducationController#destroy | web,auth |
| | PUT|PATCH | meineAusbildung/{meineAusbildung} | meineAusbildung.update | App\Http\Controllers\EducationController#update | web,auth |
| | GET|HEAD | meineAusbildung/{meineAusbildung}/edit | meineAusbildung.edit | App\Http\Controllers\EducationController#edit | web,auth |
| | GET|HEAD | meineVereine | | App\Http\Controllers\VereinController#index | web,auth |
| | POST | meineVereine | | App\Http\Controllers\VereinController#addVerein | web,auth |
| | POST | meineVereineDel | | App\Http\Controllers\VereinController#removeVerein | web,auth |
| | POST | meineWaffen | meineWaffen.store | App\Http\Controllers\WeaponController#store | web,auth |
| | GET|HEAD | meineWaffen | meineWaffen.index | App\Http\Controllers\WeaponController#index | web,auth |
| | POST | meineWaffen/DisziDrop | | App\Http\Controllers\WeaponController#getDisziDropDown | web,auth |
| | POST | meineWaffen/addDiszi | | App\Http\Controllers\WeaponController#addDiziWaffe | web,auth |
| | GET|HEAD | meineWaffen/create | meineWaffen.create | App\Http\Controllers\WeaponController#create | web,auth |
| | POST | meineWaffen/delDiszi | | App\Http\Controllers\WeaponController#delDisziWaffe | web,auth |
| | POST | meineWaffen/edit | | App\Http\Controllers\WeaponController#update | web,auth |
| | POST | meineWaffen/getDisziTable | | App\Http\Controllers\WeaponController#getDisziWaffe | web,auth |
| | POST | meineWaffen/getTable | | App\Http\Controllers\WeaponController#getTableWeapon | web,auth |
| | POST | meineWaffen/show | | App\Http\Controllers\WeaponController#show | web,auth |
| | DELETE | meineWaffen/{meineWaffen} | meineWaffen.destroy | App\Http\Controllers\WeaponController#destroy | web,auth |
| | PUT|PATCH | meineWaffen/{meineWaffen} | meineWaffen.update | App\Http\Controllers\WeaponController#update | web,auth |
| | GET|HEAD | meineWaffen/{meineWaffen} | meineWaffen.show | App\Http\Controllers\WeaponController#show | web,auth |
| | GET|HEAD | meineWaffen/{meineWaffen}/edit | meineWaffen.edit | App\Http\Controllers\WeaponController#edit | web,auth |
| | POST | password/confirm | | App\Http\Controllers\Auth\ConfirmPasswordController#confirm | web,auth |
| | GET|HEAD | password/confirm | password.confirm | App\Http\Controllers\Auth\ConfirmPasswordController#showConfirmForm | web,auth |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail | web |
| | POST | password/reset | password.update | App\Http\Controllers\Auth\ResetPasswordController#reset | web |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm | web |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController#showResetForm | web |
| | POST | register | | App\Http\Controllers\Auth\RegisterController#register | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm | web,guest |
| | GET|HEAD | verein | verein/ | App\Http\Controllers\TextController#GetClubStartseite | web |
| | GET|HEAD | verein/Genehmigung | | App\Http\Controllers\ShootingbookController#ClubGenehmigung | web,auth,club |
| | POST | verein/Genehmigung/bestaetigung | | App\Http\Controllers\ShootingbookController#clubbestaetigung | web,auth,club |
| | POST | verein/Genehmigung/getTable | | App\Http\Controllers\ShootingbookController#getClubSBzurFreigabe | web,auth,club |
| | GET|HEAD | verein/Mitglieder | | App\Http\Controllers\ClubController#index | web,auth,club |
| | POST | verein/Mitglieder | | App\Http\Controllers\ClubController#update | web,auth,club |
| | POST | verein/Profil | | App\Http\Controllers\ClubProfilController#update | web,auth,club |
| | GET|HEAD | verein/Profil | | App\Http\Controllers\ClubProfilController#index | web,auth,club |
| | GET|HEAD | verein/Schiessbuch | | App\Http\Controllers\ShootingbookController#Clubindex | web,auth,club |
| | POST | verein/Schiessbuch/getTable | | App\Http\Controllers\ShootingbookController#getClubShootingbook | web,auth,club |
| | GET|HEAD | verein/Verband | | App\Http\Controllers\VerbandController#index | web,auth,club |
| | POST | verein/Verband | | App\Http\Controllers\VerbandController#store | web,auth,club |
| | POST | verein/Verband/delete | | App\Http\Controllers\VerbandController#destroy | web,auth,club |
| | GET|HEAD | verein/home | | App\Http\Controllers\TextController#GetClubWelcome | web,auth,club |
| | POST | verein/login | | App\Http\Controllers\Club\Auth\LoginController#Clublogin | web,guest:club,guest |
| | GET|HEAD | verein/login | club.login | App\Http\Controllers\Club\Auth\LoginController#ClubshowLoginForm | web,guest:club,guest |
| | POST | verein/logout | club.logout | App\Http\Controllers\Club\Auth\LoginController#Clublogout | web,guest:club,guest |
| | POST | verein/register | club.register | App\Http\Controllers\Club\Auth\RegisterController#register | web,guest:club |
| | GET|HEAD | verein/register | club.register | App\Http\Controllers\Club\Auth\RegisterController#ClubshowRegistrationForm | web,guest:club |
| | GET|HEAD | verein/unsereStaende | | App\Http\Controllers\ShootingrangeController#index | web,auth,club |
| | POST | verein/unsereStaende | | App\Http\Controllers\ShootingrangeController#create | web,auth,club |
| | POST | verein/unsereStaende/delete | | App\Http\Controllers\ShootingrangeController#destroy | web,auth,club |
+--------+-----------+----------------------------------------+-------------------------+----------------------------------------------------------------------------+----------------------+
My Browser show the errors Message ERR_TOO_MANY_REDIRECTS
I don't really understand the concept yet. What am I doing wrong?
Thank you
Matthias
EDIT: I have Post the complete web.php

Is it possible to change/modify predefined route in Laravel Passport?

you know, Laravel Passport have predefined routes as folllow:
php artisan route:list
+--------+----------+-----------------------------------------+------+---------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-----------------------------------------+------+---------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | POST | oauth/authorize | | ...\ApproveAuthorizationController#approve | web,auth |
| | GET|HEAD | oauth/authorize | | ...\AuthorizationController#authorize | web,auth |
| | DELETE | oauth/authorize | | ...\DenyAuthorizationController#deny | web,auth |
| | GET|HEAD | oauth/clients | | ...\ClientController#forUser | web,auth |
| | POST | oauth/clients | | ...\ClientController#store | web,auth |
| | PUT | oauth/clients/{client_id} | | ...\ClientController#update | web,auth |
| | DELETE | oauth/clients/{client_id} | | ...\ClientController#destroy | web,auth |
| | GET|HEAD | oauth/personal-access-tokens | | ...\PersonalAccessTokenController#forUser | web,auth |
| | POST | oauth/personal-access-tokens | | ...\PersonalAccessTokenController#store | web,auth |
| | DELETE | oauth/personal-access-tokens/{token_id} | | ...\PersonalAccessTokenController#destroy | web,auth |
| | GET|HEAD | oauth/scopes | | ...\ScopeController#all | web,auth |
| | POST | oauth/token | | ...\AccessTokenController#issueToken | throttle |
| | POST | oauth/token/refresh | | ...\TransientTokenController#refresh | web,auth |
| | GET|HEAD | oauth/tokens | | ...\AuthorizedAccessTokenController#forUser | web,auth |
| | DELETE | oauth/tokens/{token_id} | | ...\AuthorizedAccessTokenController#destroy | web,auth |
+--------+----------+-----------------------------------------+------+---------------------------------------------+--------------+
Is it possible to modify that route?
e.g. oauth/authorize become api/v1/oauth/authorize
if yes, how?
I've been searching for answer quite sometime...
Yes, it is. You can declare your own routes in Passport::routes() method.
Include this inside the boot() method of your app/Providers/AuthServiceProvider file.
app/Providers/AuthServiceProvider.php
public function boot()
{
Passport::routes(null, ['prefix' => 'api/v1/oauth']);
}
It seems like the routes method has been removed (Passport 11.x).
In order to do this now, you would need to publish the Passport configuration file and set the path attribute to the desired value: api/v1/oauth.
php artisan vendor:publish --tag=passport-config
// config/passport.php
<?php
return [
...
'path' => 'api/v1/oauth',
];
I haven't been able to find this information in the documentation. I figured this out by looking at the source code. Here's the link for further reference.

Laravel5.6 - route unwanted

i have an issue on my view edit.blade of my EmployeeCOntroller.
Edit.blade.php
<form method="PUT" action="{{ route('employees.update', $employee_detail->id) }}" aria-label="{{ __('Edit') }}" enctype="multipart/form-data">
web.php
Route::patch('/employee/{id}', 'EmployeeController#update')->name('employees.update');
Route::get('/employee/{id}', 'EmployeeController#destroy')->name('employees.delete');
EmployeeController
public function update(Request $request, $id)
i dont know why but the request to my destroy() function on my controller !!
i have done php artisan route:list
+--------+----------+-------------------------------------+--------------------------------+------------------------------------------------------------------------+----------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-------------------------------------+--------------------------------+------------------------------------------------------------------------+----------------------------------------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | _debugbar/assets/javascript | debugbar.assets.js | Barryvdh\Debugbar\Controllers\AssetController#js | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/assets/stylesheets | debugbar.assets.css | Barryvdh\Debugbar\Controllers\AssetController#css | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | DELETE | _debugbar/cache/{key}/{tags?} | debugbar.cache.delete | Barryvdh\Debugbar\Controllers\CacheController#delete | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/clockwork/{id} | debugbar.clockwork | Barryvdh\Debugbar\Controllers\OpenHandlerController#clockwork | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/open | debugbar.openhandler | Barryvdh\Debugbar\Controllers\OpenHandlerController#handle | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | admin | admin | App\Http\Controllers\Back\AdminController#index | web |
| | GET|HEAD | admin/employee | employees.index | App\Http\Controllers\Back\EmployeeController#index | web,auth |
| | GET|HEAD | admin/employee/create | employees.create | App\Http\Controllers\Back\EmployeeController#create | web,auth |
| | POST | admin/employee/create | employees.store | App\Http\Controllers\Back\EmployeeController#store | web,auth |
| | GET|HEAD | admin/employee/show/{id} | employees.show | App\Http\Controllers\Back\EmployeeController#show | web,auth |
| | GET|HEAD | admin/employee/{id} | employees.delete | App\Http\Controllers\Back\EmployeeController#destroy | web,auth |
| | PUT | admin/employee/{id} | employees.update | App\Http\Controllers\Back\EmployeeController#update | web,auth |
| | POST | admin/employee/{id}/dossiers/create | create.document.employee.store | App\Http\Controllers\Back\DossierController#dossiers_employees_store | web |
| | GET|HEAD | admin/employee/{id}/dossiers/create | create.document.employee.show | App\Http\Controllers\Back\DossierController#dossiers_employees_create | web |
| | GET|HEAD | admin/employee/{id}/edit | employees.edit | App\Http\Controllers\Back\EmployeeController#edit | web,auth |
| | GET|HEAD | admin/entreprise | entreprises.index | App\Http\Controllers\Back\EntrepriseController#index | web,auth |
| | POST | admin/entreprise/create | entreprises.store | App\Http\Controllers\Back\EntrepriseController#store | web,auth |
| | GET|HEAD | admin/entreprise/create | entreprises.create | App\Http\Controllers\Back\EntrepriseController#create | web,auth |
| | GET|HEAD | admin/entreprise/show/{id} | entreprises.show | App\Http\Controllers\Back\EntrepriseController#show | web,auth |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | home | App\Http\Controllers\HomeController#index | web,auth |
| | POST | login | | App\Http\Controllers\Auth\LoginController#login | web,guest |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController#showLoginForm | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController#logout | web |
| | GET|HEAD | logout | logout | App\Http\Controllers\Auth\LoginController#logout | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController#reset | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController#showResetForm | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm | web,guest |
| | POST | register | | App\Http\Controllers\Auth\RegisterController#register | web,guest |
+--------+----------+-------------------------------------+--------------------------------+------------------------------------------------------------------------+----------------------------------------------+
and php artisan route:clear
i have also tried that :
<form method="POST" action="{{ route('employees.update', $employee_detail->id) }}" aria-label="{{ __('Edit') }}" enctype="multipart/form-data">
#method('PUT')
#csrf
and lets the route designed in web.php unchanged.
it still nothing working.
continu to dispatch to destroy() instead of update().
Someone have an idee ?
Thanks all !
It's because the action you're trying to do and the one you are expecting.
Try this in your route file:
Route::put('/employee/{id}', 'EmployeeController#update')->name('employees.update');
I add a link in case you want to know the difference between "PUT" and "PATCH" HTTP verbs: https://williamdurand.fr/2014/02/14/please-do-not-patch-like-an-idiot/
HTML forms do not support PUT, PATCH or DELETE actions. So, when defining PUT, PATCH or DELETE routes that are called from an HTML form, you will need to add a hidden _method field to the form. The value sent with the _method field will be used as the HTTP request method:
<form action="{{ route('employees.update', $employee_detail->id) }}" method="POST">
<input type="hidden" name="_method" value="PUT">
</form>
You may use the #method Blade directive to generate the _method input:
<form action="{{ route('employees.update', $employee_detail->id) }}" method="POST">
#method('PUT')
</form>
| PUT | admin/employee/{id}/update | employees.update | App\Http\Controllers\Back\EmployeeController#update | web,auth
| GET|HEAD | admin/employee/{id}/delete | employees.delete | App\Http\Controllers\Back\EmployeeController#destroy | web,auth |
i have added update and delete on my route and its worked now....
Route::put('/employee/{id}/update', 'EmployeeController#update')->name('employees.update');
Route::get('/employee/{id}/delete', 'EmployeeController#destroy')->name('employees.delete');
very strange for me...

"Unprocessable Entity" passing data to Laravel controller via Ajax

I'm trying to submit data to my Laravel Controller using Ajax, but I'm getting the error "422 (Unprocessable Entity)".
I've done some Googling, and I think it is to do with the JSON being passed, but I'm unsure how to solve it.
The following is what I believe to be the relevant info:
Script
$("#addStepNew").click(function() {
var step_ingredients = JSON.stringify(stepIngredients)
var step_description = $('#stepDescription').val();
var prep_step = $('input[name=prepStep]:checked').val();
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: "post",
data: "ingredients="+step_ingredients+"&description="+step_description+"&is_prep="+prep_step+"step_no=1",
dataType:'json',
url: "{{ route('ingredients.store', ['id' => $recipe->id]) }}",
success:function(data){
console.log(data);
$("#output").html('<div class="alert alert-success my-0">'+data.name+' added</div>');
$("#output").toggleClass("invisible")
$("#output").fadeOut(2000);
}
});
});
The console.log(stepIngredients) gives [{"ingredient_id":"9","ingredient_quantity":"3","Ingredient_units":"kilograms"}]
The idea is to pass it all through to my controller, and write the values to the DB, but at the minute I can't even pass the info.
I've done the following to my controller:
public function store(Request $request)
{
//$this->validate($request);
/*
$step = new Step;
$step->recipe_id = $request->recipe_id;
$step->step_no = $request->step_no;
$step->method = $request->description;
$step->save();
*/
$data = [
'success' => true,
'message'=> 'Your AJAX processed correctly',
] ;
return response()->json($data);
}
So as I understand it (I'm teaching myself this as I go along), if the AJAX is passed successfully, then it should return the success message and output it in my #output div?
+--------+-----------+--------------------------+--------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+--------------------------+--------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | App\Http\Controllers\PagesController#index | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | home | App\Http\Controllers\HomeController#index | web,auth |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController#showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController#login | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController#logout | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController#reset | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController#showResetForm | web,guest |
| | GET|HEAD | recipes | recipes.index | App\Http\Controllers\RecipesController#index | web,auth |
| | POST | recipes | recipes.store | App\Http\Controllers\RecipesController#store | web,auth |
| | GET|HEAD | recipes/create | recipes.create | App\Http\Controllers\RecipesController#create | web,auth |
| | GET|HEAD | recipes/{id}/ingredients | ingredients.create | App\Http\Controllers\IngredientsController#create | web,auth |
| | POST | recipes/{id}/ingredients | ingredients.store | App\Http\Controllers\IngredientsController#store | web,auth |
| | GET|HEAD | recipes/{id}/steps | steps.create | App\Http\Controllers\StepsController#create | web,auth |
| | POST | recipes/{id}/steps | steps.store | App\Http\Controllers\StepsController#store | web,auth |
| | PUT|PATCH | recipes/{recipe} | recipes.update | App\Http\Controllers\RecipesController#update | web,auth |
| | DELETE | recipes/{recipe} | recipes.destroy | App\Http\Controllers\RecipesController#destroy | web,auth |
| | GET|HEAD | recipes/{recipe} | recipes.show | App\Http\Controllers\RecipesController#show | web,auth |
| | GET|HEAD | recipes/{recipe}/edit | recipes.edit | App\Http\Controllers\RecipesController#edit | web,auth |
| | POST | register | | App\Http\Controllers\Auth\RegisterController#register | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm | web,guest |
| | GET|HEAD | tags | tags.index | App\Http\Controllers\TagsController#index | web,auth |
| | POST | tags | tags.store | App\Http\Controllers\TagsController#store | web,auth |
| | GET|HEAD | tags/create | tags.create | App\Http\Controllers\TagsController#create | web,auth |
| | GET|HEAD | tags/{tag} | tags.show | App\Http\Controllers\TagsController#show | web,auth |
| | PUT|PATCH | tags/{tag} | tags.update | App\Http\Controllers\TagsController#update | web,auth |
| | DELETE | tags/{tag} | tags.destroy | App\Http\Controllers\TagsController#destroy | web,auth |
| | GET|HEAD | tags/{tag}/edit | tags.edit | App\Http\Controllers\TagsController#edit | web,auth |
+--------+-----------+--------------------------+--------------------+------------------------------------------------------------------------+--------------+

Resources