Trying to access admin/users/multidel and its giving me a 404 error
Chrome console.log:
DELETE http://****.test/admin/users/multidel 404 (Not Found)
web.php
Route::group(['middleware'=>'admin'], function(){
Route::get('/admin', 'AdminController@index')->name('admin.home');;
Route::delete('admin/users/multidel', 'AdminUsersController@multiDel')->name('users.multidel');
Route::resource('admin/users', 'AdminUsersController');
});
php artisan route:list
+--------+-----------+-------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------+------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | App\Http\Controllers\HomeController@index | web,auth |
| | GET|HEAD | admin | admin.home | App\Http\Controllers\AdminController@index | web,admin |
| | POST | admin/users | users.store | App\Http\Controllers\AdminUsersController@store | web,admin |
| | GET|HEAD | admin/users | users.index | App\Http\Controllers\AdminUsersController@index | web,admin |
| | GET|HEAD | admin/users/create | users.create | App\Http\Controllers\AdminUsersController@create | web,admin |
| | DELETE | admin/users/multidel | users.multidel | App\Http\Controllers\AdminUsersController@multiDel | web,admin |
| | PUT|PATCH | admin/users/{user} | users.update | App\Http\Controllers\AdminUsersController@update | web,admin |
| | GET|HEAD | admin/users/{user} | users.show | App\Http\Controllers\AdminUsersController@show | web,admin |
| | DELETE | admin/users/{user} | users.destroy | App\Http\Controllers\AdminUsersController@destroy | web,admin |
| | GET|HEAD | admin/users/{user}/edit | users.edit | App\Http\Controllers\AdminUsersController@edit | web,admin |
| | 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 |
| | 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 | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest |
+--------+-----------+-------------------------+------------------+------------------------------------------------------------------------+--------------+
I've defined it in web.php, and its above the resource (users) so should take precedence over any other route in the 'user' resource. What am I missing?
//edit
The view code:
<li class="m-nav__item">
<a href="{{route('users.multidel')}}" data-method="delete" class="m-nav__link" id="multi-delete">
<i class="m-nav__link-icon la la-trash-o"></i>
<span class="m-nav__link-text">
Multi-Delete
</span>
</a>
</li>
and the js that drives it:
$("#multi-delete").on("click", function(e) {
e.preventDefault();
var $this = $(this);
var selected_ids = [];
var selected_hids = "";
$("tbody .m-checkable:checked").each(function() {
selected_ids.push($(this).val());
selected_hids += $("#data-row-"+$(this).val()).find("a.jquery-postback").data('hid')+"<br>";
});
swal({
title: "Are you sure?",html: "Are you sure you want to delete <strong>multiple records</strong>?<br>The following will be deleted:<br>"+selected_hids+"<br>You won't be able to revert this action once taken!",type: "warning",showCancelButton: true,confirmButtonText: "Yes, delete all records!"
}).then(function(ev) {
if (ev.value) {
$.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});
$.post({
type: $this.data('method'),
url: $this.attr('href'),
data: selected_ids,
}).done(function (result) {
console.log($result);
if (result.status == 1) {
bootstrapNotify('success', 'Deleted Successfully', 'Your records "' + $this.data('hid') + '" was deleted successfully.');
$('#records-table').DataTable().row("#data-row-" + result.id).remove().draw();
}
else {
bootstrapNotify('danger', 'Delete Failed', 'Your record "' + $this.data('hid') + '" was <strong>not</strong> deleted successfully.');
}
});
}
})
});
the controller code:
public function multiDel($request)
{
$users = User::findOrFail($request->selected_hids);
$result = 1;
/*
foreach ($users as $user){
if (!$user->delete() && $result == 1)
$result = 0;
}
*/
foreach ($users as $user){
$result += $user->email;
}
return response()->json($result);
}
admin/users/multidel
is aDELETE
method and can only be accessed if you pass a form request with an input of_method
with the value ofdelete
. That or change the route fromRoute::delete()
toRoute::get()
. – fyroc