フォームの開始
フォームの開始
{{ Form::open(array('url' => 'foo/bar')) }}
//
{{ Form::close() }}
デフォルトではPOST
メソッドが使用されます。しかし他のメソッドも指定できます。
echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))
注目: 隠しフィールドをHTMLフォームがサポートしているのは
POST
とGET
だけなため、PUT
とDELETE
メソッドでは_method
を自動的に付け加えることでごまかしています。
名前付きルートやコントローラーアクションを指定してフォームを開くこともできます。
echo Form::open(array('route' => 'route.name'))
echo Form::open(array('action' => 'Controller@method'))
ルートパラメーターを同時に渡すこともできます。
echo Form::open(array('route' => array('route.name', $user->id)))
echo Form::open(array('action' => array('Controller@method', $user->id)))
フォームでファイルのアップロードを受け付ける場合、files
オプションを配列に付け加えてください。
echo Form::open(array('url' => 'foo/bar', 'files' => true))
CSRF対策
CSRFトークンをフォームに追加する
Laravelはクロスサイトリクエストフォージェリからアプリケーションを保護する簡単な方法を提供しています。最初に、ランダムなトークンをセッションに設置します。Form::open
メソッドをPOST
、PUT
、DELETE
で使用するとそのフォームの隠しフィールドとして自動的にCSRFトークンが追加されます。もしくは、隠しCSRFフィールドをフォーム自分で追加したい場合は、token
メソッドを使用してください。
echo Form::token();
ルートにCSRFフィルターを設置する
Route::post('profile', array('before' => 'csrf', function()
{
//
}));
Formとモデルの結合
モデルフォームを開く
しばしばモデルの内容に基づいてフォームを取り扱いたいことがあることでしょう。これを行うにはForm::model
メソッドを使用します。
echo Form::model($user, array('route' => array('user.update', $user->id)))
これでテキスト入力のようなフォーム要素を生成すると、モデルの要素と同じ名前のフィールドに自動的に値が設定されます。ですから例えばemail
という名前のテキスト入力には、ユーザーモデルのemail
属性の値がセットされます。それだけではありません!セッションのフラッシュデーターとして、入力項目と同じ名前のアイテムが存在すれば、モデルの値より優先的に設定されます。そのため、優先順位は以下のようになります。
- セッションのフラッシュデーター(直前の入力)
- 明示的に指定された値
- モデルの属性の値
これによりモデルの値とフォームを結びつけるだけでなく、サーバーサイドのバリデーションエラーがある場合に入力項目の再表示が簡単にできるようになります!
注目:
Form::model
を使用する場合、Form::close
を用いてフォームを閉じてください。
ラベル
ラベル要素の生成
echo Form::label('email', 'E-Mail Address');
追加のHTML要素の指定
echo Form::label('email', 'E-Mail Address', array('class' => 'awesome'));
注目: ラベル作成後、ラベル名と同じフォーム要素を生成する場合、自動的にラベル名のIDが付きます。
テキスト、テキストエリア、パスワード、隠しフィールド
テキスト入力エリアの生成
echo Form::text('username');
デフォルト値の指定
echo Form::text('email', 'example@gmail.com');
注目: hiddenとtextareaメソッドは、textメソッドと同じ使い方をします。
パスワードの生成
echo Form::password('password');
その他の入力を生成する
echo Form::email($name, $value = null, $attributes = array());
echo Form::file($name, $attributes = array());
チェックボックスとラジオボタン
チェックボック、ラジオボタンを生成する
echo Form::checkbox('name', 'value');
echo Form::radio('name', 'value');
チェック済みのチェックボックス、ラジオボタンを生成する
echo Form::checkbox('name', 'value', true);
echo Form::radio('name', 'value', true);
数値
数値入力を生成する
echo Form::number('name', 'value');
ファイル入力
ファイル入力を生成する
echo Form::file('image');
注意:フォームは
files
オプションをtrue
にセットし、開く必要があります。
ドロップダウンリスト
ドロップダウンリストを生成
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
選択済みのデフォルトを指定し、ドロップダウンリストを生成
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');
グループ分けしたリストを生成する
echo Form::select('animal', array(
'Cats' => array('leopard' => 'Leopard'),
'Dogs' => array('spaniel' => 'Spaniel'),
));
範囲を指定して、ドロップダウンリストを生成
echo Form::selectRange('number', 10, 20);
月名を指定し、リストを生成
echo Form::selectMonth('month');
ボタン
サブミットボタンを生成
echo Form::submit('Click Me!');
注目: ボタン要素を生成する必要があるのですか?どうぞbuttonメソッドをお試しください。submitと同じ使い方です。
カスタムマクロ
フォームマクロを登録する
"macro"と名付けた機能により、Formクラスのヘルパを簡単に定義できます。どの様に使うのか見てください。最初に、マクロに名前とクロージャーを登録します。
Form::macro('myField', function()
{
return '<input type="awesome">';
});
次にその名前でマクロを呼び出します。
カスタムマクロフォームを呼び出す
echo Form::myField();
URLの生成
URLの生成についてもっと知りたい場合は、ヘルパの章を参照してください。