2012-07-31 39 views
0

我在表單中使用sfWidgetFormInputFileEditable用於文件處理目的。 下面是代碼:Symfony 1.4,存儲上傳的文件大小和名稱

/* File */ 
$this->widgetSchema['file_addr'] = new sfWidgetFormInputFileEditable(array(
    'label' => 'File', 
    'file_src' => sfConfig::get('sf_root_dir').'...', 
    'is_image' => false, 
    'edit_mode' => !$this->getObject()->isNew(), 
    'delete_label' => 'Delete?', 
    'template' => '...', 
    'with_delete' => true 
)); 
$this->validatorSchema['file_addr'] = new sfValidatorFile(array(
    'required' => $this->getObject()->isNew(), 
    'path' => sfConfig::get('sf_root_dir') .'/files' 
)); 
$this->validatorSchema['file_addr_delete'] = new deleteFileValidator(...); 
/* File: END */ 

IT賣場裏file_addr現場生成的文件名這種方式。我想訪問其他文件數據,如大小,文件名等,並將它們存儲在數據庫中。我怎樣才能做到這一點?

回答

2

processValues的形式提供了附加上傳的文件數據。所以我重寫它是這樣的:

public function processValues($values) 
    { 
    /* File data */ 
    if ($values['file_addr'] instanceof sfValidatedFile) 
    { 
     $file = $values['file_addr']; 
     $this->getObject()->setFileSize($file->getSize()); 
     $this->getObject()->setFileType($file->getType()); 
     $this->getObject()->setFileHash(md5_file($file->getTempName())); 
    } 
    return parent::processValues($values); 
    } 
2

您可以覆蓋save()方法。

public function save($con = null) { 
    $values = $this->getValues(); 
    $fileAddr = $values['file_addr']; 

    // ... Do stuff with the values ... 

    return parent::save($con); 
} 

我沒有測試它,但類似的東西應該工作。