0
votes

I have to access to PUT route via browser and get json object, but L5.2 show me an MethodNotAllowedHttpException error what have I do to for fix this ?

My URL http://laravel5.restapi.dev/a?_method=put

My route:list

route.php

<?php

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

Output

Whoops, looks like something went wrong.

MethodNotAllowedHttpException in RouteCollection.php line 218:
in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('PUT')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('PUT')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 821
at Router->findRoute(object(Request)) in Router.php line 691
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 49
at Debugbar->handle(object(Request), object(Closure))
at call_user_func_array(array(object(Debugbar), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53
3
Your route has a PSOT declaration. You say you're using PUT, that's enough to understand a "Method Not Allowed". But, when you say accessing via browser, what do you mean? Direct URL access via browsers can only make a GET.Marco Aurélio Deleu
wait....you want PUT, you define POST in code, and expect it to handle PUT? I don't understand.Pete Houston
@PeteHouston Sorry for error I define Route::put not Route::postSamvel Budumyan

3 Answers

1
votes

PUT method works only when your Form Method is POST and then you add _method input field with value PUT.

<form method="post">
    <input type="hidden" name="_method" value="PUT">
</form>
1
votes

The PUT-request is not allowed since you're using Route::post($uri, $callback).

You need to specify your route as Route::put($uri, $callback) or (if you need to match other requests, too):

Route::match(['post', 'put'], '/a', function () {
    // for post & put requests
});

Route::any('/a', function () {
    // for all methods
});

As said in the comments and in the other answer, PUT-requests must be POST-requests with the additional parameter _method=PUT.

Please refer to: https://laravel.com/docs/5.2/routing#basic-routing

0
votes

you can also use

    {{ method_field('PUT') }}

inside your form with method = post . so that method_field converts it to put

Then in your routes.php

     Route::put(.....);

or

    Route::any(...);