WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
Formクラスの基礎

Formクラスの基礎

このエントリーをはてなブックマークに追加

Formクラス(短縮Formクラス)は、HTMLタグの中のフォームに関するタグを簡単に生成するためのクラスです。

フォームの開始

フォームは、openメソッドで、フォームを開始して、closeメソッドでフォームを閉じます。openメソッドは、基本的に下記のように記述します。

Form::open(属性の配列)

引数はオプションです。デフォルトでは、URLは、現在のURL、HTTPメソッドは、POSTが使用されます。POST以外のメソッドも指定することが出来ます。名前付きルートやコントローラアクションを指定してフォームを開くことも出来ます。また、ファイルのアップロードを受け付ける場合は、filesオプションにtrueを指定します。

基本例

{{-- HTTPメソッドにPUTを指定 --}}
{{ Form::open(array('url'=>'foo/bar','method'=>'put')) }}

{{-- 名前付きルートを指定 --}}
{{ Form::open(array('route'=>'route.name')) }

{{-- コントローラアクションを指定 --}}
{{ Form::open(array('action'=>'Controller@method')) }}

{{-- ファイルのアップロードを指定 --}}
{{ Form::open(array('url'=>'foo/bar','files'=>true)) }}

CSRF対策

Laravelは下記のような簡単な手続きでCSRF*(クロスサイトリクエストフォージェリ)からアプリケーションを保護してくれます。

  1. フォームにCSRFトークンを隠しフィールドとして追加します。
  2. ルートにCSRFフィルターを適用するように指示します。

たったこれだけの行程でWEBの驚異からサイトを守ってくれます。私がPHP初心者にこそLaravel4を使ってほしいと言うのは、このような対策が簡単にできるように提供されているからです。

基本例

{{-- フォーム内にCSRFトークンを隠しフィールドとして追加 --}}
{{ Form::token() }}

//ルートにCSRFフィルターを適用する
Route::post('user/create',array('before'=>'csrf',function(){
//フィルター通過後のロジックを記述
$inputs=Input::only('username','email','password');
$user=new User($inputs);
$user->save();
}));
  • まず、Form::token()メソッドで、フォーム内にCSRFトークン*を隠しフィールドして追加します。とても簡単です。※Form::openメソッドでフォームを開始していれば、自動的に隠しトークンは生成されます。
  • そして、デフォルトとしてfilters.phpに作成されているcsrfフィルターをルートに適用するように指示します。※csrfフィルターでは、フィルターを通過しなかった場合、例外エラーが発生しますので、例外処理が必要です。
  • csrfフィルターを無事通過したら、無名関数を実行します。
  • 上記例では、フォームから受け取った値を元に新規ユーザーを作成しています。※上記は簡易例ですので、悪しからず。実際には、受け取った値をバリデーション処理してから、新規ユーザーを作成するのが、一般的です。

« »

コメント

  • ほげほげ より:

    あまりにもシンプルな記述でフォーム等の入力部分のセキュリティ対策ができることに驚きと感動です(^。^)

    安心してますます楽しくコーディングできそうです。
    (しかもコーディング量が圧倒的に少ないし、読みやすいですね\(^o^)/)

    次回の記事も楽しみにしております。

    引き続きよろしくお願いします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です