Yii (v1.1.14) で画像アップロードのコードを書いてみます。サンプル用のテーブルとして以下を作ってみました。
CREATE TABLE `item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL COMMENT 'タイトル',
`file_name` varchar(255) NOT NULL COMMENT 'ファイル名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
画像は images/item/ に保存し、file_name カラムにはファイル名を保存する形をとります。とりあえず最初に Gii の Model Generator で Item モデルを、Controller Generator で item のコントローラ、ビューを作成しておきます。
モデル: const で "jpg, png, gif" という文字列を定義しておきます (数カ所で使うのでここで定義しておきました) 。 モデルで public なプロパティ $image の追加も。 rules() ではファイルアップロードに関するバリデーションがちょっと複雑ですが、これは CFileValidator に詳しく載っています。 拡張子が jpg, png, gif のみを許可し、MIME タイプもそれらに関連するもののみ許可、ファイルサイズは 1MB 。 更新時には画像を変更してもしなくてもいいように 'allowEmpty'=>true を update シナリオでは付加しています。
ちなみに mimeTypes は finfo 系の関数がなけれが 非推奨の mime_content_type を使ったりするので、セキュリティのことを考えると PHP 5.3.0 以降を使うのが無難だと思います。
コントローラ: init() でアップロードしたファイルの URL とパスを初期化しています。 CUploadedFile::getInstance() でアップロードされたファイルの情報を取得して、 saveAs() で任意の場所に保存する、という流れです ( 詳しくは CUploadedFile ) 。
ビュー: ビューは CHtml::form() で enctype ... を指定するくらいです。
0 件のコメント:
コメントを投稿