2011-06-10 22 views
0

私はcakePHPで画像をアップロードするためにmeiouploadを使用します。アップロードされた画像の情報を保存するために「添付ファイル」という表を使用します。これは添付ファイルテーブルの構造です:cakePHP meioupload、モデルごとに異なるフォルダに画像をアップロード

CREATE TABLE IF NOT EXISTS `attachments` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
    `class` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
    `foreign_id` bigint(20) unsigned NOT NULL, 
    `filename` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
    `dir` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
    `mimetype` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, 
    `filesize` bigint(20) DEFAULT NULL, 
    `height` bigint(20) DEFAULT NULL, 
    `width` bigint(20) DEFAULT NULL, 
    `description` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

私は現在、これとクラスフィールド(テーブル名)とforeign_idを介して別の2つのテーブルを接続しています。今私の質問は、どのようにアップロードされたイメージを各モデルの別のフォルダに保存できますか?例えば

:i「はポスト」フォルダの中に私のポストの画像を保存すると「プロファイル」フォルダの中に私のプロフィール画像を保存したい

UPDATE:私の添付モデルで

public $actsAs = array(
    'MeioUpload' => array(
     'filename' => array(
      'dir' => 'post', #i set the default folder as 'post' at the moment 
      'create_directory' => true, 
      'allowed_mime' => array(
       'image/jpeg', 
       'image/pjpeg', 
       'image/png' 
      ), 
      'allowed_ext' => array(
       '.jpg', 
       '.jpeg', 
       '.png' 
      ), 
      'thumbsizes' => array(     
       'large' => array(
        'width' => 500, 
        'height' => 500 
       ), 
       'small' => array(
        'width' => 100, 
        'height' => 100 
       ) 
      ) 
     ) 
    ) 
); 

UPDATE#2:私は現在、3つのテーブル "attachment" "post"と "profile"を持っているとしましょう。meiouploadとして動作するものは "post"または "profile"私は、画像情報を「添付ファイル」、foreign_id、およびクラスフィールドに保存します。 n "attachment"は、 "post"と "profile"に "attachment"を接続するものです。

UPDATE#3:私はDunhamzzzの提案にしたがって、その場で行動を使用し、この解決策を思いついた。

$this->Attachment->Behaviors->attach(
    'MeioUpload', array(
     'filename' => array(
      'dir' => 'avatars' 
     ) 
    )); 

答えはあなたのMeioUpload、特に「DIR」オプションであるおかげ

+0

PLSは、お使いのモデルから$ actAsコードをポスト変更することができ、キー「DIR」があります。 – alexdd55

+0

@alex私の質問が更新されました – littlechad

答えて

0

、あなたは、ファイルが保存されます場所を変更することで{ModelName}または{fieldName}を置くことができます。ここでの行動自体がデフォルトです:

dir' => 'uploads{DS}{ModelName}{DS}{fieldName}',

更新

同じモデルごとに異なる設定をサポートするためにMeioUploadを得るために、あなたが変更することができますattaching the behaviour on the flyを、試みることができます設定してください。

例えば、あなたの投稿で、アクション

$this->Attachment->Behaviours->attach('MeioUpload', array('dir' => '/uploads/posts/'); 

は、ドキュメント上の行動上の部分を必ずお読みください、それがうまくいけばごとのモデルこれとは対照的に、あなたはアクション単位でソリューションを作業するのに役立ちます行動を伴う。

+0

hmmは、私が{ModelName}を実行すると、この動作が「添付ファイル」モデルであるため、画像を「添付ファイル」フォルダにアップロードするだけです。私の質問が更新されます。 – littlechad

+0

最新の回答をご覧ください。 – Dunhamzzz

+0

@dunhamzzどこにそれを付けるべきですか?私は私のコントローラの中でそれを使用しようとすると、それは動作しません – littlechad

0

$ actAs配列の例を次に示します。

'MeioUpload' => array(
     'filename' => array(
      'dir' => 'files/banners', 
      'create_directory' => false, 
      'allowed_mime' => array(
       'image/jpeg', 
       'image/pjpeg', 
       'image/gif', 
       'image/png' 
      ), 
      'allowed_ext' => array(
       '.jpg', 
       '.jpeg', 
       '.png', 
       '.gif' 
      ), 
     ) 
    ), 

あなたが見ることができるように、あなたが

関連する問題