kohana3.0.x から 3.1.xの移行でバリデーション周りが変更になったので注意。
View (HTML)
<form action="/" method="post" accept-charset="utf-8" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="Upload" /> </form>
Controller
public function action_upload() { if (isset($_FILES['file'])) { // バリデーションインスタンスを作成 $validation = Validation::factory($_FILES); // バリデーションルールを設定 $validation->rules('file', array( array('Upload::not_empty'), array('Upload::valid'), array('Upload::type', array(':value', array('jpg', 'png', 'gif'))), array('Upload::size', array(':value', '2M')), ) ); // チェックして if ($validation->check()){ // アップロード $file_name = Upload::save($_FILES['file'] /*[, $filename, $directory, $chmod ]*/); } else { // エラー処理 $validation->errors('error'); } } }
message (error.php)
return array ( 'file' => array( 'Upload::not_empty' => 'ファイルが指定されていません。', 'Upload::valid' => 'データが不完全です。', 'Upload::type' => '許可されていないファイルタイプです。', 'Upload::size' => 'ファイルサイズ制限以上のファイルです。', ), );
解説
バリデーション Validation::factory();
バリデーションインスタンスを作成します。3.0.xでは'Validate::'だったので注意です。バリデーションルールの設定 Validation::rules();
バリデーションルールを設定します。こちらも3.0.xから変更があり、引数の渡し方が違っていますので注意です。今回はファイルアップロードですので、Uploadクラス(ヘルパー)のテストを使用しています。
- Upload::not_empty
- 空でないかチェック
- Upload::valid
- ファイル情報が適正かチェックします。必須項目の場合は、このルール前にnot_emptyのチェックを行ってください。
- Upload::type
- 拡張子をチェックします。第1引数は(3.0.xとは違い)ファイルを指定します。ここでは3.1.xから追加されたコンテキスト変数':value'(フィールドの値)を使用します。第2引数は、許可する拡張子の文字列を配列で指定します。
- Upload::size
- ファイルサイズをチェックします。第1引数はファイルを指定し、第2引数は最大ファイルサイズを指定します。書式は、数値+単位(B, K, MiB, GB, etc..)になります。
アップロード処理 Upload::save()
第1引数が、アップロードするファイルのデータ。必須。第2引数$filenameは、アップロード後のファイル名を任意の名称にする場合に指定。指定がなければ、タイムスタンプ+デフォルト名になり、Upload::$remove_spacesがTRUEの場合(デフォルト)はファイル名に含まれるスペースは、'_'(アンダーバー)に変換されます。
第3引数$directoryは、アップロードするディレクトリを指定します。デフォルト値は、Upload::$default_directoryに保持されており、'upload'です。
第4引数は、アクセス権限を指定します。デフォルトは0644です。
戻り値は、アップロード後のファイルのフルパスが返ってきます。
エラー処理
$validation->errors()の引数は、メッセージファイルのファイル名を指定します。メッセージファイルの指定があれば、メッセージ配列から設定したメッセージを返し、メッセージファイルの指定がなければ失敗したルール名('Upload::not_empty'など)が返ります。