FuelPHP

FuelPHP まとめノート9 (フォームの処理)

More than 3 years have passed since last update.

(まとめ中)


概要


  • 1.formの生成(Formクラス)

  • 2.CSRF対策(設定/トークンの発行)

  • 3.ファイルアップロード(設定)

  • 4.入力の受け取り(Inputクラス)

  • 5.Validation(Validationクラス/不正な値,入力漏れの検証)

Fieldsetクラス(フォーム出力や検証を1つのオブジェクトとして操作)

http://fuelphp.jp/docs/1.5/classes/validation/validation.html


1. Formクラス

http://fuelphp.jp/docs/1.5/classes/form.html

Formクラスは、個々のフォームパーツを作ることと、バリデーションチェック付きのフォーム全体を作ることができます。 後者を作る場合は、Fieldsetクラスと、組み合わせて使います。


  • タグは、Form::open() Form::close()メソッドによって生成できる。

  • Form::open()は引数として文字列か配列が指定可能です。
     文字列を指定した場合、action=""属性に指定される。

- アプリケーション内のURLの場合は、URL中の「コントローラー名以降」を指定すれば、

config.phpの設定にしたがって自動的にフルURLが生成される。

- method属性 postに設定

- accept-charset属性には、config.phpでencodingに設定した文字コードセットが入る。

echo Form::open('welcome');

<form action="http://blog.localhost/welcome" accept-charset="utf-8" method="post">

個別に指定したい場合は、Form::open()の「第一引数を配列」にする。

echo Form::open(array('action'=>'http://www.example.com/', 'method=>'get','accept-charset'=>'shift_JIS', 'class'=>'member_form'));

こうなる

<form action="http://www.example.com/" method="get" accept-charset="shift_JIS" class="member_form">



第2引数には、フォーム内に埋め込みたいtype='hidden'のフィールドを設定する。

変数名から値への連想配列で指定することで、複数のhiddenフィールドを設定できる。

echo Form::open('welcome',array('key1'=>'val1','key2'=>'val2'));

こうなる

<form action="http://blog.localhost/welcome" accept-charset="utf-8" method="post">

<input name="key1" value="val1" type="hidden" id="form_key1" />
<input name="key2" value="val2" type="hidden" id="form_key2" />


2.CSRF対策(設定/トークンの発行)

http://fuelphp.jp/docs/1.5/general/security.html


  • トークンの発行

  • トークンのチェック


設定

APPPATH/config/config.php 該当箇所のコメントを外す


config.php

'security' => array(

  'csrf_autoload' => false,
 'csrf_token_key' => 'fuel_csrf_token',
 'csrf_expiration' => 0,

csrf_autoloadをtrueにした場合、特定のメソッドのリクエストに対しては常にトークンのチェックが行われるようになる。

直前のページで必ずトークンを発行しておく必要がある。


どのメソッドのリクエストに対して、自動的にトークンチェックを行うかを

設定する場合

例)POSTメソッドのみトークンの自動チェックを行う場合


config.php

'security' => array(

 //'csrf_autoload' => false,
//'csrf_token_key' => 'fuel_csrf_token',
//'csrf_expiration' => 0,
'csrf_autoload_methods' => array('post'),

※csrf_autoload_methodsにメソッド名の配列を指定(小文字)することで変更できる


uploadクラス

http://fuelphp.jp/docs/1.5/classes/upload/config.html

<設定>

corepath/config/upload.php コピー

apppath/config/upload.php に置く。(変更が必要な項目のみ配列を指定する)

max_sizeのみ指定したい場合

return array(

'max_size' =>1048576
);


実装手順


  • コントローラーで UPload:process()メソッドを実行

  • ファイルの検証、ファイル情報の取得を行う

※設定ファイルでauto_processが有効になっている場合はprocess()メソッドを明示的に呼び出さなくても自動的に実行される。


  • save()メソッドでファイルを保存する

  • is_valid()メソッドでファイルの検証に成功したアップロードがあるかどうか確認する

  • 検証に成功したアップロードファイルが1つ以上ある場合にtrueを返す

  • get_files() 検証に成功したファイルの情報を取得する

$config = array(

'path' => DOCROOT . 'files' . DS,
'ext_whitelist' => array('jpg', 'jpeg', 'gif', 'png'),
);
Upload::process($config);
if(upload::is_valid()){
upload::save();
}


if(Upload::is_valid())
{
$files = Upload::get_files();
}


Inputクラス

http://fuelphp.jp/docs/1.7/classes/input.html


post()

$form=Input::post()


  • 上記のように指定することで、$_POST配列全体を取得できる

  • post メソッドは、$_POST 変数を読み込みます。引数なしで呼び出すと、配列をすべて取得する。

  • 多次元配列には、階層をドット (.) で区切ることでアクセスできる。


param()

Input::param()メソッド


  • GETとPOSTの両方のデータを同時に取得することができる。

  • GETとPOSTの両方に同じフィールド名がある場合、POSTのデータで上書きされる。


file()

Input::file()を使うと、$_FILES配列の内容を取得できる。


Validationクラス

http://fuelphp.jp/docs/1.5/classes/validation/validation.html

Validationクラスはフォームから送信された入力に不正な値や入力漏れがないかを検証するためのクラス。

検証規則を設定する。add_fieldは、フィールド名、ラベル、規則、の順に引数を設定する。ラベルはエラーメッセージで使われるフィールド名。

1.Validationクラスのインスタンスを生成する

$val = Validation::forge()

2.検証規則を設定する(add_field()メソッドを用いる)

$val->add_field('name','お名前','required');


設定(エラーメッセージを日本語化する)


  • APPPATH/lang/以下に該当する言語のディレクトリを作り、その下にvalidation.phpというファイルを作る。

    APPPATH/lang/ja/validation.php


  • config.phpで'language'の項目を設定する。


'language' => 'ja'

'language_fallback' => 'en'

ラベルを変更する

Validationオブジェクトのset_message()メソッドで設定ファイルのエラーメッセージを上書きすることもできる。

$val->set_message('require',':labelが入力されていません');


より高度な検証

add_rule()メソッド