HTMLフォームを作成する


forms

 悩み事

フォームを作成しましょう

HTMLの<form>タグではなく、LaravelのFormファサードを利用してみましょう

 解決方法

Form::open()メソッドを利用します

通常はBladeテンプレートで利用します
利用にあたっていくつか方法があります

デフォルト値を利用

{{Form::open()}}

生成されるHTMLは下記の通りです

<form method="POST" action="http://currenturl" accept-charset="UTF-8">
<input name="_token" type="hidden" value="somelongrandom string">

POSTメソッドを使用してフォームを開始し、
actionに現在のURLを用いて、accept-charset="UTF-8"を追加します
また、CSRF対策にtokenが追加されます

URLを指定します

URLを指定する場合に、actionではなくurlキーを利用して指定します
なおForm::open()で利用可能な引数は配列のみです

{{Form::open(['url' => 'http://full.url/here'])}}

生成されるHTMLは下記の通りです

<form method="POST" action="http://full.url/here" accept-charset="UTF-8">
<input name="_token" type="hidden" value="somelongrandom string">

ルーティングを利用する

ルーティングを利用した指定をする場合は、
actionではなくrouteキーを利用して、ルーティング名を指定します

{{Form::open(['route' => 'named.route'])}}

作成されていないルーティング名を指定した場合は、エラーが返却されます
それ以外では、ルーティング名から完全のURLlを生成します

<form method="POST" action="http://full.url/someplace" accept-charset="UTF-8">
<input name="_token" type="hidden" value="somelongrandom string">

アクションでコントローラーを指定する

actionで指定します

{{Form::open(['action' => 'Controller@method'])}}

コントローラまたはそのメソッドが存在しない場合、エラーが返却されます
それ以外では、指定されたコントローラとメソッドから完全なURLを生成します

<form method="POST" action="http://full.url/someplace" accept-charset="UTF-8">
<input name="_token" type="hidden" value="somelongrandom string">

HTTPメソッドを指定する

もちろん、HTTPメソッドはPOST以外のものも利用可能です
配列で'method'キーを利用して指定します
利用可能なHTTPメソッドは、'get', 'put', 'patch', 'post', そして 'delete'です

{{Form::open(['method' => 'get'])}}

生成されるHTMLは下記の通りです

<form method="GET" action="http://currenturl" accept-charset="UTF-8">

GETメソッドではtokenが追加されない事に注意して下さい

ファイルのアップロードを指定する

'files'キーを使って、'files' => trueと指定すると、
フォームはファイルアップロードをサポートします

{{Form::open(['files' => true])}}

フォームにenctype="multipart/form-data"属性が追加されます

<form method="POST" action="http://currenturl" accept-charset="UTF-8"
  enctype="multipart/form-data">
<input name="_token" type="hidden" value="somelongrandom string">

 アドバイス

ブラウザが処理できないHTTPメソッドを どうやってLaravelは処理をするのでしょうか?

ほとんどのブラウザはPUT, PATCH, DELETEメソッドは処理できません
それらが指定された場合、Laravelはhiddenフィールドにmethod="POST"を追加します

{{Form::open(['method' => 'PUT'])}}

生成されるHTMLは下記の通りです

<form method="POST" action="http://currenturl" accept-charset="UTF-8">
<input name="_method" type="hidden" value="PUT">
<input name="_token" type="hidden" value="somelongrandom string">

フレームワークは希望通りのHTTPメソッドを指定ながらも、
hiddenフィールドを利用して、処理をサポートしてくれますので、
特に意識する必要はありません


Author:Chuck Heintzelman

Editor and Translator:Yuuki Takezawa