3

我正在为我的用户使用 sfWidgetFormInputFileEditable 小部件来上传图像。

我想看看是否有办法改变它的默认工作方式。当用户添加“新”对象时,我希望它显示通用图片,当它是“编辑”时,它可以显示现有图片。我尝试编写一个 PHP 条件语句,但这对我不起作用,因为当它是一个“新”项目时,我无法提取参数“getPicture1”,因为它不存在。

我的小部件目前:

$this->widgetSchema['picture1'] = new sfWidgetFormInputFileEditable(array(
    'label' => ' ',
    'file_src' => '/uploads/car/'.$this->getObject()->getPicture1(),
    'is_image' => true,
    'edit_mode' => true,
    'template' => '<div>%file%<br />%input%</div>',
));
4

1 回答 1

3

你有两个选择(第二个更容易)。

第一种选择:创建自己的sfWidgetFormInputFileEditable并扩展原始版本。

在一个文件中lib/widget/myWidgetFormInputFileEditable.class.php

class myWidgetFormInputFileEditable extends sfWidgetFormInputFileEditable
{
  protected function getFileAsTag($attributes)
  {
    if ($this->getOption('is_image'))
    {
      if (false !== $src = $this->getOption('file_src'))
      {
        // check if the given src is empty of image (like check if it has a .jpg at the end)
        if ('/uploads/car/' === $src)
        {
          $src = '/uploads/car/default_image.jpg';
        }
        $this->renderTag('img', array_merge(array('src' => $src), $attributes))
      }
    }
    else
    {
      return $this->getOption('file_src');
    }
  }
}

然后你需要调用它:

$this->widgetSchema['picture1'] = new myWidgetFormInputFileEditable(array(
  'label'     => ' ',
  'file_src'  => '/uploads/car/'.$this->getObject()->getPicture1(),
  'is_image'  => true,
  'edit_mode' => true,
  'template'  => '<div>%file%<br />%input%</div>',
));

第二个选项:检查对象是否是新的,然后使用默认图像。

$file_src = $this->getObject()->getPicture1();
if ($this->getObject()->isNew())
{
  $file_src = 'default_image.jpg';
}

$this->widgetSchema['picture1'] = new sfWidgetFormInputFileEditable(array(
  'label'     => ' ',
  'file_src'  => '/uploads/car/'.$file_src,
  'is_image'  => true,
  'edit_mode' => true,
  'template'  => '<div>%file%<br />%input%</div>',
));
于 2012-07-11T10:41:47.987 回答