我正在使用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>',
));
答案 0 :(得分: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>',
));