2012-11-08 55 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

我希望这对你有所帮助。

对不起,我的英语:)