複数ファイルアップロード

CakePHPで複数ファイルのアップロードについて調べてみました。といっても普通のPHPのコードと同じではありますが、postするフィールド名に[]を付与して配列にします。

view

<?php 
    echo $form->create( 'Upload', array( 'type'=>'file', 'url' => '/upload/multiupload', 'enctype' => 'multipart/form-data'));
    echo $this->Form->input( 'files', array( 'type' => 'file', 'multiple' => 'multiple', 'name' => 'files[]'));
    echo $this->Form->submit( 'upload');
    echo $form->end();
?>

以下のような形式でpostされるため、saveする際は、データ配列を作り直す必要があります。

// $this->log( $this->data, LOG_DEBUG);
Array
(
    [files] => Array
        (
            [name] => Array
                (
                    [0] => bg-home.png
                    [1] => bg-home.jpg
                )
            [type] => Array
                (
                    [0] => image/png
                    [1] => image/jpeg
                )
            [tmp_name] => Array
                (
                    [0] => /var/tmp/phpMVd2wx
                    [1] => /var/tmp/phpALIBhj
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )
            [size] => Array
                (
                    [0] => 353271
                    [1] => 52376
                )
        )
)

[追 12.12.29] フィールド名のかたちを変えると

以下のようにForm->inputのフィールド名をかえるとファイルごとの配列として格納してくれます。

<?php 
  echo $form->create( 'Upload', array( 'type'=>'file', 'url' => '/upload/multiupload', 'enctype' => 'multipart/form-data'));
//echo $this->Form->input( 'files', array( 'type' => 'file', 'multiple' => 'multiple', 'name' => 'files[]'));
  echo $this->Form->input( 'files. ', array( 'type' => 'file', 'multiple' => 'multiple'));
  echo $this->Form->submit( 'upload');
  echo $form->end();
?>

配列

Array
(
    [files] => Array
        (
            [0] => Array
                (
                    [name] => bg-home.png
                    [type] => image/png
                    [tmp_name] => /var/tmp/phpdxbKr6
                    [error] => 0
                    [size] => 353271
                )
            [1] => Array
                (
                    [name] => bg-home.jpg
                    [type] => image/jpeg
                    [tmp_name] => /var/tmp/phpkWir95
                    [error] => 0
                    [size] => 52376
                )
        )
)
  • このエントリーをはてなブックマークに追加

関連記事

コントローラ内でバリデーション処理を呼び出す

通常、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。 バリデーシ

CakePHP 1.3 インストール

使い古されている手ではありますが、表題の件とレンタルサーバへの配置方法などにも使えますので参考にしていただけたらと思います。 まずはレンタルサーバでCakePHPを動作させる CakePHPア

no image

Htmlヘルパー

ソース:\cake\libs\view\helpers\html.php charset / 文書の文字コードを設定する <?php echo $this->Html-

Cookieログイン

今回は、「keep me logged in」などログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcook

no image

Jsヘルパーを使用してAjax更新

更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。 Jsヘルパーを使用して

ログインに追加の条件を付与する「userScope」

「ユーザ登録」の続きです。 ユーザ登録後、activate(statusを0に設定するを)せずに「仮登録」のままで、正しいusernameとpasswordでログインを試したところ認証に引っかかって

no image

Sessionコンポーネント

ソース: /cake/libs/controller/components/session.php read read($name = null) セッションの情報を読み込みます。 $

no image

validateErrors と validationErrors

CakePHP試験中に気付いたことがあって、メモです。 $this->validateErrors自身バリデーション処理している 今まで、save時にバリデーションエラーメッセージををログに出力し

メール送信(qdmail)

CakePHP(+qdmail)でメール送信する処理を実装しました。 準備 2つのライブラリ(.php)をダウンロードし、以下のように配置して下さい。 app/controllers/compo

フィールド単位でバリデーション無効化

save処理の際に条件付でモデルのバリデーションをフィールド単位でスキップする処理のメモです。(最終的に使うことはなかったのでメモ) 関数は unset( $this->->validate[

Message

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

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    PAGE TOP ↑