【发布时间】:2017-09-12 18:38:08
【问题描述】:
我学习了 Symfony 3,我想创建表单类来上传文件,所以我创建了 ImageType,cutom 表单类型来处理以 NewsType 上传的图像(带有一些描述和这个字段的表单):
class ImageType extends AbstractType
{
private $path;
public function __construct($path)
{
$this->path = $path;
}
public function getParent()
{
return FileType::class;
}
public function getName()
{
return 'image';
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'image_name' => ''
));
}
/**
* @param FormView $view
* @param FormInterface $form
* @param array $options
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['image_name'] = $options['image_name'];
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setAttribute('image_name', $options['image_name'])
->addModelTransformer(new ImageTransformer($this->path))
}
}
我使用 ImageTransformer 将文件名(如 124324235342.jpg)转换为实例 File 类。当我创建并将日期保存到数据库时,表单工作正常,但如何在编辑模式下管理实体?
public function editAction(Request $request, News $news)
{
$path = $this->getParameter('upload_directory') . $news->getImage();
$image = $news->getImage();
$form = $this->createForm(NewsType::class, $news, ['image_name' => $image]);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
$this->get('app.image_uploader')->uploadNews($news, $image);
$em = $this->getDoctrine()->getManager();
$em->persist($news);
$em->flush();
return $this->redirectToRoute('admin_news_index');
}
return $this->render('admin/news/form.html.twig', [
'form' => $form->createView(),
'news' => $news
]);
}
我希望处理案例使用相同的表单来编辑数据库实体。我填充了表单,但是当用户不上传图片时,我不想更改此字段并使用旧值。如何做到这一点?
【问题讨论】: