ファイルのアップロード(Helper)[kohana 3.x]
ファイルのアップロードを行います。
コントローラーの作成
kohanaで提供されているUploadというヘルパークラスを利用してファイルのアップロードを行います。
次のようなコントローラーを作成します。
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Admin extends Controller_Template {
function action_upload()
{
$this->template->content = View::factory('upload')
if($_FILES)
{
Upload::save($_FILES['file']);
}
}
}
Upload::saveメソッドには、保存するファイル情報の他に「新規ファイル名」、「保存先ディレクトリ」、「ファイルのアクセス権」を指定することができます。デフォルトのアップロードディレクトリは、uploadディレクトリに設定されています。
public static save(array $file [,string $filename = NULL,string $directory = NULL,integer $chmod = integer 420])
テンプレートの作成
ファイルをアップロードするためのテンプレート(ビュー)を作成します。
<div id="contents">
<h2>ファイルのアップロード</h2>
<?php echo Form::open(NULL, array('enctype' => 'multipart/form-data'));?>
<fieldset>
<div>
<?php echo Form::label('file','ファイル:');?>
<?php echo Form::file('file',array('size' => 80));?>
<div>
<div>
<?php echo Form::submit(NULL, 'アップロード');?>
</div>
</fieldset>
<?php echo Form::close();?>
<?php include Kohana::find_file('views', 'templates/errors') ?>
</div>
ファイルをアップロードするには、enctype属性にmultipart/form-dataに設定する 必要があります。※MIMEのマルチパートデータとしてファイルを送信するようにします。
Validationとメッセージ
アップロードするファイルの形式を制限したり、サイズを制限したい場合があります。 ここでは、アップロードされるファイルを確認しエラー処理を行ってみます。
コントローラーを次のように作成します。
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Admin extends Controller_Template {
function action_upload()
{
$this->template->content = View::factory('upload')
-> bind('errors',$errors);
$validate = Validate::factory($_FILES);
$validate->rules('file',
array('Upload::not_empty' => array(),
'Upload::type' =>array('Upload::type' => array('jpg','png','gif')),
)
);
$errors = array();
if ($validate->check())
{
// アップロード成功
Upload::save($_FILES['file']);
}
else
{
// エラー処理
$errors = $validate->errors('upload');
}
}
}
この例では、ファイル入力フィールド(name属性がfile)へファイルタイプの指定と 必須入力のルールを追加しています。ルールは、フィールド名とルール(Function又はStaticメソッド)を 設定します。
他にもサイズ指定(Upload::size)などが用意されているようです。
$validate->errorsには、メッセージファイルのファイル名を指定します。
メッセージの作成
application/messagesディレクトリにupload.phpを次のように作成します。
<?php defined('SYSPATH') OR die('No direct access allowed.');
return array
(
'file' => array(
'Upload::not_empty' => 'ファイルが指定されていません。',
'Upload::type' => 'jpg,png,gif以外のファイルが指定されています。',
'default' => 'アップロードに失敗しました。'),
);