如何从symfony 1.4中的操作设置sfWidgetFormInputFileEditable的file_src

时间:2013-01-05 07:37:59

标签: php symfony-1.4

我想从我的动作类

中为我的sfWidgetFormInputFileEditable设置文件src

我尝试使用以下代码,但始终具有我在Baseform中设置的值

$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

为什么上面的代码不起作用?

1 个答案:

答案 0 :(得分:2)

您必须一次只将一个参数传递给setOption()。或者您可以使用setOptions()一次覆盖所有选项。

您是否有sfWidgetFormInputFileEditable生成的基本形式?我不这么认为。 请勿手动编辑生成的基类。

请至少阅读文档中的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(),
  )));

  //...
}

这就是我通常的做法。您应该将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();
}