微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

表单 – 使用相同的Symfony 2表单进行编辑和删除(字段差异)

目前我有一张表格
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 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,'required' => false));

        if ($builder->getData()->isNew()) { // or !getId()
            $builder->add('delete','checkBox'); // or whatever
        }
    }
    // ...
}

原文地址:https://www.jb51.cc/html/225379.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐