0
votes

i want to delete my admin product using route resource. but when i submit it goes to page 404 not found same as update method.. but my url id its showing.. this is the url on destroy method http://127.0.0.1:8000/admin/1 but the store its working fine it directing to my url and stored in database.

this is my store method on Admin/ProductController resource

store(Request $request)
    {
        $request['user_id'] = auth()->user()->id;
        Product::create($request->all());
        return redirect()->back();
    }

this is my destroy method Admin/ProductController resource

 public function destroy($id)
    {

        Product::where('id',$id->id)->delete();
        ]);
        return redirect()->back();
    }

here is my form action store method this form working fine

<form method="post" action="{{route('admin.store')}}">
      <input type="text" name="category" class="form-control">
      <button type="submit" class="btn btn-primary">Save changes</button>
  </form>

here is my form action delete the problem is when i submit it goes to 404 page not found

<form method="post" action="{{route('admin.destroy',$product->id)}}">
       <input type="text" name="category" class="form-control">
       <button type="submit" class="btn btn-primary">Save changes</button>
 </form>

here is my web route user and admin

       Route::get('/', function () {
            return view('welcome');
        });

        Auth::routes();

   Route::group(['as'=>'user.','prefix'=>'users','namespace'=>'App\Http\Controllers\Users'],
        function (){
            Route::get('/',[App\Http\Controllers\Users\UsersController::class,'index']);
            Route::resources(['/' => ProductController::class,],['except'=>['index']]);
        }); 
   Route::group(['middleware'=>'admin','as'=>'admin.','prefix'=>'admin','namespace'=>'App\Http\Controllers\Admin'],
        function (){
            Route::get('/',[App\Http\Controllers\Admin\AdminController::class,'index']);
            Route::resources(['/' => ProductController::class],['except'=>['index']]);
        });

here is my route list

+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+------------+
| Domain | Method    | URI                    | Name             | Action                                                                 | Middleware |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+------------+
|        | GET|HEAD  | /                      |                  | Closure                                                                | web        |
|        | POST      | admin                  | admin.store      | App\Http\Controllers\Admin\ProductController@store                     | web        |
|        |           |                        |                  |                                                                        | admin      |
|        | GET|HEAD  | admin                  | admin.index      | App\Http\Controllers\Admin\ProductController@index                     | web        |
|        |           |                        |                  |                                                                        | admin      |
|        | GET|HEAD  | admin/create           | admin.create     | App\Http\Controllers\Admin\ProductController@create                    | web        |
|        |           |                        |                  |                                                                        | admin      |
|        | DELETE    | admin/{}               | admin.destroy    | App\Http\Controllers\Admin\ProductController@destroy                   | web        |
|        |           |                        |                  |                                                                        | admin      |
|        | PUT|PATCH | admin/{}               | admin.update     | App\Http\Controllers\Admin\ProductController@update                    | web        |
|        |           |                        |                  |                                                                        | admin      |
|        | GET|HEAD  | admin/{}               | admin.show       | App\Http\Controllers\Admin\ProductController@show                      | web        |
|        |           |                        |                  |                                                                        | admin      |
|        | GET|HEAD  | admin/{}/edit          | admin.edit       | App\Http\Controllers\Admin\ProductController@edit                      | web        |
|        |           |                        |                  |                                                                        | admin      |
|        | GET|HEAD  | api/user               |                  | Closure                                                                | api        |
|        |           |                        |                  |                                                                        | auth:api   |
|        | 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  | password/confirm       | password.confirm | App\Http\Controllers\Auth\ConfirmPasswordController@showConfirmForm    | web        |
|        |           |                        |                  |                                                                        | auth       |
|        | POST      | password/confirm       |                  | App\Http\Controllers\Auth\ConfirmPasswordController@confirm            | web        |
|        |           |                        |                  |                                                                        | auth       |
|        | POST      | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web        |
|        | GET|HEAD  | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web        |
|        | POST      | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web        |
|        | GET|HEAD  | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web        |
|        | GET|HEAD  | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web        |
|        |           |                        |                  |                                                                        | guest      |
|        | POST      | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web        |
|        |           |                        |                  |                                                                        | guest      |
|        | GET|HEAD  | users                  | user.            | App\Http\Controllers\Users\UsersController@index                       | web        |
|        | POST      | users                  | user.store       | App\Http\Controllers\Users\ProductController@store                     | web        |
|        |           |                        |                  |                                                                        | auth       |
|        | GET|HEAD  | users/create           | user.create      | App\Http\Controllers\Users\ProductController@create                    | web        |
|        |           |                        |                  |                                                                        | auth       |
|        | DELETE    | users/{}               | user.destroy     | App\Http\Controllers\Users\ProductController@destroy                   | web        |
|        |           |                        |                  |                                                                        | auth       |
|        | GET|HEAD  | users/{}               | user.show        | App\Http\Controllers\Users\ProductController@show                      | web        |
|        |           |                        |                  |                                                                        | auth       |
|        | PUT|PATCH | users/{}               | user.update      | App\Http\Controllers\Users\ProductController@update                    | web        |
|        |           |                        |                  |                                                                        | auth       |
|        | GET|HEAD  | users/{}/edit          | user.edit        | App\Http\Controllers\Users\ProductController@edit                      | web        |
|        |           |                        |                  |                                                                        | auth       |
+--------+-----------+------------------------+------------------+---------------------------------------

here is my App\Http\Auth\LoginController

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
    use AuthenticatesUsers;
    protected $redirectTo = RouteServiceProvider::HOME;
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
    public function login(Request $request)
    {
        $inputVal = $request->all();

        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required',
        ]);
        if(auth()->attempt(array('email' => $inputVal['email'], 'password' => $inputVal['password']))){
            if (auth()->user()->role == 'admin') {
                return redirect()->route('admin.');
            }else{
                return redirect()->route('user');
            }
        }else{
            return redirect()->route('login')
                ->with('error','Email & Password are incorrect.');
        }
    }
}

here is my middleware admin

  namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class Admin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if(auth()->user()->role==='admin'){
            return $next($request);
        }
        return redirect()->back();
    }
}

i dont know what is wrong on this the store its working but the update and destroy not working. i guess the error is on route web or middleware.

2

2 Answers

0
votes

I think your problem is that your are not telling your delete form to use DELETE action. Because of HTML, you cannot use action="delete" so you have to "fake it" and Blade allows you to do that.

So try this:

<form method="post" action="{{route('admin.destroy',$product->id)}}">
    @method('DELETE')
    <input type="text" name="category" class="form-control">
    <button type="submit" class="btn btn-primary">Save changes</button>
</form>

More info about it on the Blade documentation.


Same fix should apply for your Update, you should use @method('PUT') after your update form tag.

0
votes

If your method is post then you have to add also csrf

<form method="post" action="{{route('admin.destroy',$product->id)}}">
    {{ method_field('delete') }}
    {{ csrf_field() }}
    <input type="text" name="category" class="form-control">
    <button type="submit" class="btn btn-primary">Save changes</button>
</form>