我在使用 Symfony (Doctrine) 进行文件管理时遇到问题。关键是文件上传成功,问题是当我更新存储包含图像的字段的实体时,图像被删除。
我想知道如何进行更改(而不是创建)实体并将表单中的输入文件类型留空,图像仍然存在并且没有被删除。
我把我的代码留在下面。
问候和感谢。
实体:
public function getAbsolutePath()
{
return null === $this->getLogo()
? null
: $this->getUploadRootDir().'/'.$this->getLogo();
}
public function getWebPath()
{
return null === $this->getLogo()
? null
: $this->getUploadDir().'/'.$this->getLogo();
}
protected function getUploadRootDir()
{
// la ruta absoluta del directorio donde se deben
// guardar los archivos cargados
return __DIR__.'/../../../../web/' . $this->getUploadDir();
}
protected function getUploadDir()
{
// se deshace del __DIR__ para no meter la pata
// al mostrar el documento/imagen cargada en la vista.
return 'images/agencies';
}
public function filename()
{
// Comprueba si la agencia dispone de identificador para ponerlo como nombre de logo.
if ($this->getId() != null || $this->getId() != '')
$filename = $this->getId() . '.' . $this->getlogo()->getClientOriginalExtension();
else
$filename = $this->getlogo()->getClientOriginalName();
// Devuelve el nombre de fichero generado.
return $filename;
}
public function upload()
{
if (null === $this->getLogo())
{
return;
}
$this->getLogo()->move(
$this->getUploadRootDir(),
$this->filename()
);
//$this->logo = $this->getUploadDir().$this->getLogo()->getClientOriginalName();
$this->logo = $this->filename();
}
控制器
/**
* Formulario para lo configuración de los datos de la agencia.
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function formConfigDataAction()
{
// Consulta los datos de la agencia.
$em = $this->getDoctrine()->getManager();
$agency = $em->getRepository('PanelBundle:Agencies')->find($this->getUser()->getId());
// Crea el formulario según 'AgenciesType' pasando los datos seleccionados.
$form = $this->createForm(new AgenciesConfigDataType(), $agency);
// Recoge la petición.
$request = $this->getRequest();
// Comprueba si se han obtenidos datos mediante POST.
if ($request->getMethod() == 'POST')
{
// Asocia el formulario con los datos de la petición.
$form->handleRequest($request);
// Comprueba si los datos recibidos son válidos.
if ($form->isValid())
{
// Sube la imagen
$agency->upload();
// Almacena los cambios.
$em->flush();
// Genera la alerta.
$this->addFlash(
'success',
'Se ha guardado la nueva configuración.'
);
}
else
{
// Genera la alerta.
$this->addFlash(
'danger',
'Existen campos no válidos. Comprueba los datos introducidos.'
);
}
// Redirige al usuario.
return $this->redirect($this->generateUrl('agencies_form_config_data'));
}
// Renderiza la vista.
return $this->render('PanelBundle:Agencies:form-config-data.html.twig', array(
'form' => $form->createView(),
'logo' => $agency->getLogo()
));
}
看法
<div class="form-group col-lg-6">
{{ form_label(form.logo, 'Subir nuevo logotipo') }}
{{ form_widget(form.logo) }}
{{ form_errors(form.logo) }}
<span class="help-block">Recomendamos un tamaño no superior a 400px x 250px</span>
</div>