2013-01-05 56 views
0

我想從我的動作類,這是如何從行動設置file_src爲sfWidgetFormInputFileEditable symfony的1.4

我試着用下面的代碼,但總是被設置爲我sfWidgetFormInputFileEditable文件src有我設置的值在音素表示只有

$this->Form->setOption('file_name',array(
    'file_src' => sfConfig::get('sf_upload_dir')."\\". $dirId ."\\".$this->imgName, 
    'is_image' => true, 'edit_mode' => true, 'delete_label' => true, 'with_delete' =>false 
)); 

$dirid是文件夾名稱。我可以在BaseForm中獲得$dirid,所以我想從操作類中覆蓋file_src

爲什麼上面的代碼不起作用?

回答

2

您一次只能將一個參數傳遞給setOption()。或者您可以使用setOptions()一次覆蓋所有選項。

你有sfWidgetFormInputFileEditable在一個genrated的基本形式?我不這麼認爲。 請不要手動編輯生成的基類。

請在文檔中至少閱讀this chapter

注意:爲什麼公司ID是必需的?

我覺得應該是更好地把它變成形式是這樣的:

// EditSlideForm.class.php 
public function configure() 
{ 
    //... 

    // use this if the file is optional 
    $this->setWidget('file_name', new sfWidgetFormInputFileEditable(array(
    'file_src' => $this->getObject()->getPublicFileLocation(), 
    'is_image' => true, 
    'with_delete' => (boolean) $this->getObject()->getFile(), 
    'edit_mode' => !$this->isNew() && $this->getObject()->getFileName(), 
))); 
    $this->setValidator('file_name', new sfValidatorFile(array(
    'mime_types' => 'web_images', 
    'path' => $this->getObject()->getFileDir(), 
    'required' => false, 
))); 
    $this->setValidator('file_name_delete', new sfValidatorBoolean()); 

    // use this if the file is required 
    $this->setWidget('file_name', new sfWidgetFormInputFileEditable(array(
    'file_src' => $this->getObject()->getPublicFileLocation(), 
    'is_image' => true, 
    'with_delete' => false, 
    'edit_mode' => !$this->isNew() && $this->getObject()->getFileName(), 
))); 
    $this->setValidator('file_name', new sfValidatorFile(array(
    'mime_types' => 'web_images', 
    'path' => $this->getObject()->getFileDir(), 
))); 

    //... 
} 

這是怎麼了我usally做到這一點。您應該將getPublicFileLocation()getFileDir()添加到模型中。例如:

static public function getFileDir() 
{ 
    return sfConfig::get('sf_upload_dir') . '/slide-file'; 
} 

public function getPublicFileLocation() 
{ 
    return str_replace(sfConfig::get('sf_web_dir'), '', self::getFileDir()) . '/' . $this->getFileName(); 
} 
相關問題