2010年11月16日

日本一簡単な cakephp mediaplugin 設置方法

お願いします♪いいねとかつぶやいたりして下さい
 
例えば User コントローラーでファイル(画像)をアップロードさせたい場合。

仕様
/users/upload/ にアップロードフォームを作る



DBテーブルを作ろう!


CREATE TABLE `yourprefix_attachments` (
  `id` int(10) NOT NULL auto_increment,
  `model` varchar(255) NOT NULL default '',
  `foreign_key` int(10) NOT NULL default '0',
  `dirname` varchar(255) default NULL,
  `basename` varchar(255) NOT NULL default '',
  `checksum` varchar(255) NOT NULL default '',
  `group` varchar(255) default NULL,
  `alternative` varchar(50) default NULL,
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
)  AUTO_INCREMENT=7 ;


ファイルを設置しよう



1 https://github.com/davidpersson/media/downloads から mediaplugin 1.3beta をDLし、/plugins/media/に設置。

2 http://www.hideblog.net/nikkis/show/110/ を参考に日本語ファイルの文字化けを解消する

3 以下をbootstrap.phpへ追加
//media plugin
require_once(APP.'plugins'.DS.'media'.DS.'config'.DS.'core.php');


ファイルを組み込もう




○ビュー (/users/upload/)
<h1>ユーザーと写真を追加</h1>

<?=$form->create(null,array('url' => $_SERVER['REQUEST_URI'] , 'type' => 'file'));?>
お名前
<?=$form->input('User.id',array('type' => 'hidden' , 'value' => $_SESSION['User']['id']));?>
<?=$form->input('name',array('type' => 'text'));?>

画像をアップロード<br />

<?=$form->input('Attachment.0.file',array('type' => 'file'));?>
<?=$form->input('Attachment.0.model',array('type' => 'hidden' , 'value' => $this->params['models'][0]));?>//User になる
<?=$form->input('Attachment.0.group',array('type' => 'hidden'));?>
<?=$form->input('Attachment.0.alternative',array('type' => 'hidden' , 'value' => 'User'));?>
<?=$form->end('submit');?>


ここまででアップロードフォームの作成が完了。続いて、アップロードされたものをどう保存するか。

○モデル User.php
class User extends AppModel {
    var $hasMany = array(
                'Attachment' => array(
                'className' => 'Media.Attachment',
                'foreignKey' => 'foreign_key',
                'conditions' => array('model' => 'User'),
                'dependent' => true,
                )
            );
}


○コントローラー (/users/upload/)
if($this->data){
    if ($this->User->saveAll($this->data, array('validate' => 'first'))) {
        echo '保存完了!';
    } else {
        echo '保存できません';	
    }
}


たったこれだけでファイルをアップロードできるようになる。
アソシエーションはその都度やりたいんだけど、動的bindmodelをやるとうまく保存できない。
だからモデルで最初にhasmanyしておく必要がある。

○バリデーション

/media/models/attachment.php の $validateの項目を編集して validateの内容を変更。
ただ、ファイルが空かどうかを調べるのができないので、これはコントローラー側で判断すべきか。
関連するタグ: PHP cakephp
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ