0

I want to create update method and this is the code:

Route::get("/allProducts/edit/{id}","AllproductController@edit")->name('Allproduct.edit');
Route::post("/allProducts/update/{id}","AllproductController@update")->name('Allproduct.update');
<form class="form-horizontal tasi-form" method="post" enctype="multipart/form-data"
                      action="{{ route('allProducts.update' , [ 'id'=>$allproduct->id ]) }}">
                    {{ csrf_field()}}

  public function update(Request $request, $id)
    {
       $data = Allproduct::find($id);

        $data->name = $request->name;
        $data->save();

        return redirect(route('allProducts.index'));
    }

when I click on submit button it shows me :

"The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE" error!

what is the problem?

Wahyu Kristianto
  • 8,719
  • 6
  • 43
  • 68
hadis
  • 39
  • 1
  • 11
  • Does this answer your question? [Doing HTTP requests FROM Laravel to an external API](https://stackoverflow.com/questions/22355828/doing-http-requests-from-laravel-to-an-external-api) – Rich Mar 30 '20 at 02:35

2 Answers2

1

Your route names do not match.

in routes: name('Allproduct.update');

in the form: allProducts.update

Also, you can always check the name of the routes thanks to the console command:

php artisan route:list

if you want use method PUT:

you can change method in routes:

Route::post to Route::put

and add next in form:

<input type="hidden" name="_method" value="PUT"> 

OR

@method('PUT') 

this is if your laravel version is 6 and if your version another, check correct way to use PUT method in forms at laravel.com/docs/6.x/routing with your version.

Katanji
  • 68
  • 8
0

As said here

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:

So your form should look like this:

<form class="form-horizontal tasi-form" method="post" enctype="multipart/form-data" action="{{ route('Allproduct.update' , [ 'id'=>$allproduct->id ]) }}"> @csrf @method('PUT')

You had a typo in your route name and it was missing the method field.

Change your route to this:

Route::put("/allProducts/update/{id}","AllproductController@update")->name('Allproduct.update');

This will work, but i strongly recommend you read this laravel naming conventions, and then change the name of your controller and model to AppProductController, AppProduct.

Piazzi
  • 2,490
  • 3
  • 11
  • 25