我的实体上有 3 个属性可以上传照片:照片1 照片2 照片3
我首先在编辑表单上坚持这一点,如果我在没有文件的情况下提交,这将取消设置所有旧数据文件
我的控制器(与新建/编辑相同,是一个配置文件表单):
public function perfilAction()
{
$peticion = $this->getRequest();
$em = $this->getDoctrine()->getEntityManager();
$usuario = $this->get('security.context')->getToken()->getUser();
$user = $em->getRepository('GarotaBundle:Garota')->find(1);
$formulario = $this->createForm(new GarotaType(), $usuario);
if ($peticion->getMethod() == 'POST') {
$formulario->bindRequest($peticion);
if ($formulario->isValid()) {
$usuario->subirFoto1();
$usuario->subirFoto2();
$usuario->subirFoto3();
/*echo "<pre>";
var_dump($usuario);
echo "<br /><br /><br /><br /><br />";
var_dump($user);
exit;
*/
if($usuario->getFoto1() == null)
$usuario->setFoto1($user->getFoto1());
if($usuario->getFoto2() == null)
$usuario->setFoto2($user->getFoto2());
if($usuario->getFoto3() == null)
$usuario->setFoto3($user->getFoto3());
$em->persist($usuario);
$em->flush();
$this->get('session')->setFlash('info',
'Dados atualizados com sucesso'
);
return $this->redirect($this->generateUrl('perfil'));
}
}
return $this->render('GarotaBundle:Default:perfil.html.twig', array(
'usuario' => $usuario,
'formulario' => $formulario->createView()
));
}
我的班级:
<?php
namespace GarotasGarotaBundleEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
use SymfonyBridgeDoctrineValidatorConstraints as DoctrineAssert;
use SymfonyComponentValidatorExecutionContext;
use GarotasGarotaBundleUtilUtil;
/**
* GarotasGarotaBundleEntityGarota
*
* @ORMTable()
* @ORMEntity(repositoryClass="GarotasGarotaBundleEntityGarotaRepository")
* @DoctrineAssertUniqueEntity("login")
*/
class Garota implements UserInterface
{
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $login
*
* @ORMColumn(name="login", type="string", length=255)
*/
private $login;
/**
* @var string $password
*
* @ORMColumn(name="password", type="string", length=255)
*/
private $password;
/**
* @var string $password
*
* @ORMColumn(name="nome", type="string", length=255)
*/
private $nome;
/**
* @var string $password
*
* @ORMColumn(name="email", type="string", length=255)
*/
private $email;
/**
* @var string $salt
*
* @ORMColumn(name="salt", type="string", length=255)
*/
private $salt;
/**
* @var string $foto1
*
* @ORMColumn(name="foto1", type="string", length=255,nullable=true)
* @AssertImage(maxSize = "500k")
*/
private $foto1;
/**
* @var string $foto2
*
* @ORMColumn(name="foto2", type="string", length=255,nullable=true)
* @AssertImage(maxSize = "500k")
*/
private $foto2;
/**
* @var string $foto3
*
* @ORMColumn(name="foto3", type="string", length=255,nullable=true)
* @AssertImage(maxSize = "500k")
*/
private $foto3;
/**
* @var DateTime $data_cadastro
*
* @ORMColumn(name="data_cadastro", type="datetime")
*/
private $data_cadastro;
/**
* @var boolean $eliminada
*
* @ORMColumn(name="eliminada", type="boolean")
*/
private $eliminada;
/**
* @var boolean $eliminada
*
* @ORMColumn(name="termos", type="boolean")
*/
private $termos;
/**
* @var boolean $eliminada
*
* @ORMColumn(name="assinado", type="boolean")
*/
private $assinado;
/**
* @var boolean $eliminada
*
* @ORMColumn(name="categoria", type="integer")
*/
private $categoria;
function equals(SymfonyComponentSecurityCoreUserUserInterface $usuario)
{
return $this->getLogin() == $usuario->getLogin();
}
/**
* Método requerido por la interfaz UserInterface
*/
function eraseCredentials()
{
}
/**
* Método requerido por la interfaz UserInterface
*/
function getRoles()
{
return array('ROLE_GAROTA');
}
/**
* Método requerido por la interfaz UserInterface
*/
function getUsername()
{
return $this->getLogin();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set login
*
* @param string $login
* @return Garota
*/
public function setLogin($login)
{
$this->login = $login;
return $this;
}
public function __toString()
{
return $this->getNome();
}
public function subirFoto1()
{
$directorioDestino = __DIR__.'/../../../../web/garotas';
if (null === $this->foto1) {
return;
}
$nombreArchivoFoto = 'girleria-'.Util::getSlug($this->getNome()).rand(1,9).rand(1,9).rand(1,9).rand(1,9).rand(1,9).'.'.$this->foto1->guessExtension();
$this->foto1->move($directorioDestino, $nombreArchivoFoto);
$this->setFoto1($nombreArchivoFoto);
}
public function subirFoto2(){
$directorioDestino = __DIR__.'/../../../../web/garotas';
if (null === $this->foto2) {
return;
}
$nombreArchivoFoto = 'girleria-'.Util::getSlug($this->getNome()).rand(1,9).rand(1,9).rand(1,9).rand(1,9).rand(1,9).'.'.$this->foto2->guessExtension();
$this->foto2->move($directorioDestino, $nombreArchivoFoto);
$this->setFoto2($nombreArchivoFoto);
}
public function subirFoto3(){
$directorioDestino = __DIR__.'/../../../../web/garotas';
if (null === $this->foto3) {
return;
}
$nombreArchivoFoto = 'girleria-'.Util::getSlug($this->getNome()).rand(1,9).rand(1,9).rand(1,9).rand(1,9).rand(1,9).'.'.$this->foto3->guessExtension();
$this->foto3->move($directorioDestino, $nombreArchivoFoto);
$this->setFoto3($nombreArchivoFoto);
}
/**
* Get login
*
* @return string
*/
public function getLogin()
{
return $this->login;
}
public function setNome($nome)
{
$this->nome = $nome;
return $this;
}
public function getNome()
{
return $this->nome;
}
public function setEmail($email)
{
$this->email = $email;
return $this;
}
public function getEmail()
{
return $this->email;
}
/**
* Set password
*
* @param string $password
* @return Garota
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Get password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Set salt
*
* @param string $salt
* @return Garota
*/
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
/**
* Get salt
*
* @return string
*/
public function getSalt()
{
return $this->salt;
}
/**
* Set foto1
*
* @param string $foto1
* @return Garota
*/
public function setFoto1($foto1)
{
$this->foto1 = $foto1;
return $this;
}
/**
* Get foto1
*
* @return string
*/
public function getFoto1()
{
return $this->foto1;
}
/**
* Set foto2
*
* @param string $foto2
* @return Garota
*/
public function setFoto2($foto2)
{
$this->foto2 = $foto2;
return $this;
}
/**
* Get foto2
*
* @return string
*/
public function getFoto2()
{
return $this->foto2;
}
/**
* Set foto3
*
* @param string $foto3
* @return Garota
*/
public function setFoto3($foto3)
{
$this->foto3 = $foto3;
return $this;
}
/**
* Get foto3
*
* @return string
*/
public function getFoto3()
{
return $this->foto3;
}
/**
* Set data_cadastro
*
* @param DateTime $dataCadastro
* @return Garota
*/
public function setDataCadastro($dataCadastro)
{
$this->data_cadastro = $dataCadastro;
return $this;
}
/**
* Get data_cadastro
*
* @return DateTime
*/
public function getDataCadastro()
{
return $this->data_cadastro;
}
/**
* Set eliminada
*
* @param boolean $eliminada
* @return Garota
*/
public function setEliminada($eliminada)
{
$this->eliminada = $eliminada;
return $this;
}
/**
* Get eliminada
*
* @return boolean
*/
public function getEliminada()
{
return $this->eliminada;
}
public function setTermos($termos)
{
$this->termos = $termos;
return $this;
}
public function getTermos()
{
return $this->termos;
}
public function setAssinado($assinado)
{
$this->assinado = $assinado;
return $this;
}
public function getAssinado()
{
return $this->assinado;
}
public function setCategoria($categoria)
{
$this->categoria = $categoria;
return $this;
}
public function getCategoria()
{
return $this->categoria;
}
}
好的,不久前有这个"问题",基本思想是:
- 从数据库中获取对象
- 在表单绑定之前将当前文件存储到变量中(例如$oldFile = $object->getFile())
- 将传入请求绑定到表单
-
if ( $object->getFile() === NULL ) $object->setFile($oldFile)
希望这有帮助...