目前我有一个表格
class Project extends AbstractType {
public function buildForm(FormBuilder $builder, array $options) {
$builder->add('name');
$builder->add('description', 'textarea');
$builder->add('iconFile', 'file', array('label' => 'Icon', 'required' => false));
}
// ...
}
到目前为止,我用于编辑和删除的效果很好。但现在,在编辑“模式”下,我想允许用户清除icon
对于该项目。我想我可以添加一个单选按钮,但我需要它在添加模式下处于“非活动”状态。现在我正在我的模型中处理图像上传,我希望在那里有它(除非有更好的地方可以做到这一点)
/**
* If isDirty && iconFile is null: deletes old icon (if any).
* Else, replace/upload icon
*
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function updateIcon() {
$oldIcon = $this->iconUrl;
if ($this->isDirty && $this->iconFile == null) {
if (!empty($oldIcon) && file_exists(APP_ROOT . '/uploads/' . $oldIcon))
unlink($oldIcon);
} else {
// exit if not dirty | not valid
if (!$this->isDirty || !$this->iconFile->isValid())
return;
// guess the extension
$ext = $this->iconFile->guessExtension();
if (!$ext)
$ext = 'png';
// upload the icon (new name will be "proj_{id}_{time}.{ext}")
$newIcon = sprintf('proj_%d_%d.%s', $this->id, time(), $ext);
$this->iconFile->move(APP_ROOT . '/uploads/', $newIcon);
// set icon with path to icon (relative to app root)
$this->iconUrl = $newIcon;
// delete the old file if any
if (file_exists(APP_ROOT . '/uploads/' . $oldIcon)
&& is_file(APP_ROOT . '/uploads/' . $oldIcon))
unlink($oldIcon);
// cleanup
unset($this->iconFile);
$this->isDirty = false;
}
}
您可以使用数据在表单构建期间设置条件:
class Project extends AbstractType {
public function buildForm(FormBuilder $builder, array $options) {
$builder->add('name');
$builder->add('description', 'textarea');
$builder->add('iconFile', 'file', array('label' => 'Icon', 'required' => false));
if ($builder->getData()->isNew()) { // or !getId()
$builder->add('delete', 'checkbox'); // or whatever
}
}
// ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)