フォームの開始

フォームの開始

{{ Form::open(array('url' => 'foo/bar')) }}
    //
{{ Form::close() }}

デフォルトではPOSTメソッドが使用されます。しかし他のメソッドも指定できます。

echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))

注目: 隠しフィールドをHTMLフォームがサポートしているのはPOSTGETだけなため、PUTDELETEメソッドでは_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メソッドをPOSTPUTDELETEで使用するとそのフォームの隠しフィールドとして自動的に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属性の値がセットされます。それだけではありません!セッションのフラッシュデーターとして、入力項目と同じ名前のアイテムが存在すれば、モデルの値より優先的に設定されます。そのため、優先順位は以下のようになります。

  1. セッションのフラッシュデーター(直前の入力)
  2. 明示的に指定された値
  3. モデルの属性の値

これによりモデルの値とフォームを結びつけるだけでなく、サーバーサイドのバリデーションエラーがある場合に入力項目の再表示が簡単にできるようになります!

注目: 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');

注目: hiddentextareaメソッドは、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の生成についてもっと知りたい場合は、ヘルパーの章を参照してください。