2012-11-08 53 views
1

我試圖在我的Web應用程序中使用User模型的插件作爲Behavior。我已經與我命名爲filename配置中使用它,因爲我在這裏展示:CakePHP Uploader插件 - 通過行爲設置保存多個尺寸

<?php 
class Avatar extends AppModel { 
    public $name = 'Avatar'; 
    public $actsAs = array (
     'Uploader.Attachment' => array (
      'filename' => array (
       'name'  => 'setNameAsImgId', 
       'saveAsFilename' => true, 
       'uploadDir' => '/files/avatars/160/', 
       'dbColumn' => 'filename', 
       'defaultPath' => 'default.png', 
       'maxNameLength' => 20, 
       'overwrite' => true, 
       'stopSave' => true, 
       'allowEmpty' => false, 
       'transforms' => array (
        array('method' => 'resize', 'width' => 160, 'height' => 160, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true) 
       ) 
      ) 
     ) 
    ); 
// and so on... 
?> 

此配置文件保存到文件夾/files/avatars/160,我把所有的160個像素的尺寸用這種方法圖像通過Users控制器:

<?php 
class UsersController extends AppController { 

public function add() { 
    if ($this->User->Avatar->save($this->request->data)) { 
     // do some code... 
    } 
} 

在視圖add我會插入此代碼上傳的文件:

echo $this->Form->input('Avatar.filename', array('type' => 'file', 'label'=>'Upload the avatar ')); 

這工作正常,如果我只保存一個配置名爲filename在上面的例子中,我的問題是,我需要保存不同的大小和作物的相同圖像,所以我想保存一個像這樣的大小列表:

/files/avatars/160/filename.jpg 
/files/avatars/48/filename.jpg 

要做到這一點,我認爲其他的配置添加到我的Avatar模型,這個

<?php 
class Avatar extends AppModel { 
    public $name = 'Avatar'; 
    public $actsAs = array (
     'Uploader.Attachment' => array (
      'filename' => array (
       'name'  => 'setNameAsImgId', 
       'saveAsFilename' => true, 
       'uploadDir' => '/files/avatars/160/', 
       'dbColumn' => 'filename', 
       'defaultPath' => 'default.png', 
       'maxNameLength' => 20, 
       'overwrite' => true, 
       'stopSave' => true, 
       'allowEmpty' => false, 
       'transforms' => array (
        array('method' => 'resize', 'width' => 160, 'height' => 160, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true) 
       ) 
      ), 
      'small' => array (
       'name'  => 'setNameAsImgId', 
       'saveAsFilename' => true, 
       'uploadDir' => '/files/avatars/48/', 
       'dbColumn' => 'filename', 
       'defaultPath' => 'default.png', 
       'maxNameLength' => 20, 
       'overwrite' => true, 
       'stopSave' => true, 
       'allowEmpty' => false, 
       'transforms' => array (
        array('method' => 'resize', 'width' => 48, 'height' => 48, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true) 
       ) 
      ) 
     ) 
    ); 
// and so on... 
?> 

我應該怎樣建立UsersController到同一圖像的多種作物保存Avatar? 我是否也應該更改add視圖以使其有效? 我不會在窗體中使用多個輸入文件。

回答

0

你可以這樣做:

$this->Form->input('Avatar.filename.', array('type' => 'file', 'multiple'); 

正如你看到的,我把.,字段名之後,和屬性。有了這個,你可以做多次上傳。所以結果$this->request->data是這樣的:

[Avatar] => array(
    ['filename'] => array(
    [0] => array(
     'name' => '...', 
     'tmp_name' => '...', 
     ... 
    ), 
    [1] => array(
     'name' => '...', 
     'tmp_name' => '...', 
     ... 
    ), 
    [2] => array(
     'name' => '...', 
     'tmp_name' => '...', 
     ... 
    ), 
    [3] => array(
     'name' => '...', 
     'tmp_name' => '...', 
     ... 
    ) 
) 
) 

現在你需要改變你的行爲中使用的是一個簡單的foreach

我希望這對你有所幫助。

對不起,我的英語:)