ファイルのアップロードを行います。
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のマルチパートデータとしてファイルを送信するようにします。
アップロードするファイルの形式を制限したり、サイズを制限したい場合があります。 ここでは、アップロードされるファイルを確認しエラー処理を行ってみます。
コントローラーを次のように作成します。
<?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' => 'アップロードに失敗しました。'), );
Copyright 1997-2010 BBB All rights reserved.