2012-04-27 1 views
1

Я пытаюсь установить $ UploadDir динамически в моем AttachmentsController, но всякий раз, когда я пытаюсь использовать:

$this->Uploader = new Uploader(array('uploadDir' => "/files/uploads/clients/".$id."/")); 

переменных по умолчанию UploadDir на один в Plugin/Uploader/Vendor/Uploader.php.

Я попытался удалить объявление переменной 'uploadDir' из массивов $ actAs и из $ _defaults в AttachmentBehavior.php, но не повезло.

Я использую CakePHP в течение нескольких недель, и я не могу понять, как это сделать.

Когда я печатаю_r ($ this-> Uploader); переменная uploadDir установлена ​​правильно, но когда я проверяю каталог загрузки, она сохраняет значение по умолчанию, установленное в классе Uploader.php.

код ниже:

AttachmentsController.php

App::import('Vendor', 'Uploader.Uploader'); 

class AttachmentsController extends AppController {   

public $helpers = array("Html", "Form", "Session"); 
public $uses = array("Attachment"); 

public function index() 
{   
    $docs = $this->Attachment->findAllByClientIdAndUserId($this->Session->read("Client.id"), AuthComponent::user('id')); 
    $this->set("page",10); 
    $this->set("docs",$docs); 
} 

public function upload() 
{ 

    if($this->request->is('post')) 
    { 
     $id = $this->Session->read("Client.id"); 
     unset($this->Uploader); 
     $this->Uploader = new Uploader(array('uploadDir' => '/files/uploads/wizno/')); 
     $this->Uploader->setup(array('uploadDir' => '/files/uploads/wizno/')); 
     //print_r($this->Uploader);    
     //exit; 

      if(!empty($this->data)){ 
       if($this->Attachment->save($this->data)) 
       { 
        $this->redirect("/attachments"); 
       } 
      } 
    } 

} 

}

attachment.php

class Attachment extends AppModel { 
public $name = "Attachment"; 
public $belongsTo = array("Client","User"); 
public $useTable = "uploads"; 

public $virtualFields = array(
'created' => 'DATE_FORMAT(Attachment.created, "%m/%d/%Y")', 
'modified' => 'DATE_FORMAT(Attachment.modified, "%m/%d/%Y")' 
); 

public $actsAs = array(  
    'Uploader.Attachment' => array(
     'file' => array(
      'name'  => '', 
      'uploadDir' => "/files/uploads/clients/WTF/500", 
      'dbColumn' => 'path', 
      'maxNameLength' => 50, 
      'overwrite' => true, 
      'stopSave' => true, 

      'metaColumns' => array(
       'size' => 'filesize', // The size value will be saved to the filesize column 
       'type' => 'type'  // And the same for the mimetype 
      ) 
        ) 
    ) 
); 

}

Uploader.php Класс Эта переменная всегда переопределяет мои настройки, и я не знаю, как заставить ее сотрудничать.

/** 
* Destination upload directory within $baseDir. 
* 
* @access public 
* @var string 
*/ 
public $uploadDir = 'files/uploads/2012/'; 

AttachmentBehavior.php

protected $_defaults = array(
    'name' => '', 
    'baseDir' => '', 
    'uploadDir' => '/files/100/',  
    'dbColumn' => 'path',  
    'defaultPath' => '', 
    'maxNameLength' => null, 
    'overwrite' => false,   // Overwrite a file with the same name if it exists 
    'stopSave' => true,    // Stop model save() on form upload error 
    'allowEmpty' => true,   // Allow an empty file upload to continue 
    'saveAsFilename' => true,  // If true, will only save the filename and not relative path    
    'metaColumns' => array(
     'ext' => '', 
     'type' => '', 
     'size' => '', 
     'group' => '', 
     'width' => '', 
     'height' => '', 
     'filesize' => '' 
    ) 
); 

Несмотря на множество '' UploadDir к различным папкам в различных файлах, она по-прежнему неплатежи к одному в Uploader.php класса. Пришлось изменить все эти папки, чтобы узнать, какой файл контролирует вещи.

Желательно, чтобы в документации плагина было больше примеров и более четкое объяснение того, как выполнить первоначальную настройку.

ответ

1

Так почему бы не

CakePlugin::load('Uploader');  
App::import('Vendor', 'Uploader.Uploader'); 

$this->Uploader = new Uploader(array('tempDir' => TMP,'uploadDir'=> DS . 'custom_dir' . DS)); 

//OR 

$this->Uploader->uploadDir = DS . 'custom_dir' . DS; 

Вы всегда можете представить документацию и ошибки в Miles'github repos