14

私はブラウザがサポートPOSTGETリクエストのみをサポートしていることを知っています、そしてLaravelはPUT次のコードを使用してリクエストをサポートします:

<?= Form::open('/path/', 'PUT'); ?>
    ... form stuff ...
<?= Form::close(); ?>

これにより、次のHTMLが生成されます

<form method="POST" action="http://example.com/home/" accept-charset="UTF-8">
    <input type="hidden" name="_method" value="PUT" />
    ... form stuff ...
</form>

フレームワークはこれをどのように処理しますか?リクエストを送信するルートを決定する前にPOST、リクエストをキャプチャしますか?フレームワークに実際を送信するためにajaxを使用していますか?PUT

4

5 に答える 5

50

非表示のフィールドを挿入し、そのフィールドはそれがPUTまたはDELETE要求であることを示します

ここを参照してください

echo Form::open('user/profile', 'PUT');

結果:

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

次に、コアファイルでルーティングするときに_methodをrequest.php探し(コードで「なりすまし」を探します)、それを検出すると、その値を使用して正しいRESTfulコントローラーにルーティングします。

これを達成するために、まだ「POST」を使用しています。使用されるajaxはありません。

于 2013-02-07T17:17:40.237 に答える
14

LaravelはsymfonyHttpFoundationを使用して、この_method変数をチェックし、その内容に基づいてリクエストをPUTまたはDELETEに変更します。はい、これはルーティングが行われる前に発生します。

于 2013-02-07T17:18:51.743 に答える
1

次のように、開いているフォーム内で配列を使用することもできます。

{{ Form::open( array('route' => array('equipment.update', $item->id ),
'role' => 'form',
'method' => 'put')) }}

メソッドを必要なものに変更するだけです。

于 2013-11-19T22:59:38.347 に答える
1

遅い答えですが、これを見つけてAPIを機能させることができない他の人のためにこれを追加することが重要だと思います。

Laravelのリソースルートを次のように使用する場合:

Route::resource('myRoute','MyController');

PUTメソッドを呼び出すためにを期待しupdate()ます。これが(フォーム送信以外で)正常に機能するためには、 ContentTypex-www-form-urlencodedとして渡すことを確認する必要があります。これはフォームのデフォルトですが、これを設定しない限り、cURLまたはPostmanなどのツールを使用してリクエストを行うことはできません。

于 2014-02-21T04:20:11.060 に答える
1

PUTは通常、更新要求を指します。

を使用してlaravelブレードテンプレート内のフォームを開くと、

{{ Form::open('/path/', 'PUT') }}

次のように、フォーム内に非表示フィールドが作成されます。

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

コントローラ内でPUTリクエストを処理するには、putプレフィックスを使用してメソッドを作成する必要があります。

for example, putMethodName()

したがって、指定すると、

{{ Form::open('controller/methodName/', 'PUT') }}

Form:open内。次に、次のようにコントローラーメソッドを作成する必要があります。

class Controller extends BaseController {
    public function putMethodName()
    {
        // put - usual update code logic goes here
    }
}
于 2014-04-26T19:49:49.600 に答える