2016-08-19 16 views
0

ブラウザからPUTルートにアクセスしてjsonオブジェクトを取得する必要がありますが、L5.2ではMethodNotAllowedHttpExceptionエラーが表示されます。これを修正するにはどうすればよいですか?RouteCollection.php行のMethodNotAllowedHttpException 218 Laravel 5.2

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

マイルート:リスト

route.php

<?php 

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

出力

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 
+2

を入れて、それを変換し、あなたのルートは 'PSOT'宣言を持っています。あなたは 'PUT'を使っていると言っています。それは" Method Not Allowed "を理解するのに十分です。しかし、「ブラウザ経由でアクセスする」と言うと、どういう意味ですか?ブラウザ経由での直接URLアクセスは 'GET'しかできません。 –

+0

wait .... 'PUT'をしたい、コードで' POST'を定義し、 'PUT'を扱うと期待していますか?わかりません。 –

+0

@PeteHoustonエラーを申し訳ありません。私はRoute :: put not Route :: postを定義します。 –

答えて

1

PUTメソッドは、あなたのフォームメソッドがPOSTの場合にのみ動作し、その後_method入力フィールドに値PUTを追加します。

<form method="post"> 
    <input type="hidden" name="_method" value="PUT"> 
</form> 
+0

フォームメソッドがPUTであれば、それをサポートするブラウザでも動作します。 – ceejayoz

+0

@ceejayozはい..しかし、それはMozilla Firefoxでのみサポートされていました。そして、http://stackoverflow.com/questions/8054165/using-put-method-in-html-formで与えられているように、 "XHTML 1.xフォームはGETとPOSTのみをサポートしています。GETとPOSTは"メソッド "属性" – jaysingkar

+0

@jaysingkarフォームメソッドGETで同じことをするレシピはありますか? –

1

Route::post($uri, $callback)を使用しているため、PUTリクエストは許可されていません。

あなたは(あなたも、他の要求と一致する必要がある場合)またはRoute::put($uri, $callback)としてあなたのルートを指定する必要があります。

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

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

としてはコメントで、その他の回答で述べた、PUT-の要求がなければなりませんPOST-追加パラメータ_method=PUTでリクエストしてください。あなたも=ポストメソッドを使用して、フォーム内の

{{ method_field('PUT') }} 

を使用することができますhttps://laravel.com/docs/5.2/routing#basic-routing

+0

私の仕事では、ブラウザ経由でPUTルートにアクセスできる必要があります。何をする必要がありますか? –

0

を参照してください。そのためmethod_fieldがあなたのroutes.phpに続いて

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

または

Route::any(...); 
関連する問題