Muy buenas,
La verdad es que ya no puedo más con esto, me tiene un poco desesperado.
Mi problema es que en el administrador con SonataAdminBundle no puede eliminar ningún campo de la base de datos imágenes y lo más que me mosquea es que tengo otro hecho igual con vídeos y funciona correctamente. Bueno en el de vídeo son solamente enlaces a YouTube, pero es lo mismo. Porque aunque no me eliminara la foto de la carpeta, me podría eliminar el registro.
Expongo mi código haber si me podéis sacar de este aprieto que llevo tres días, para esto leyendo, probando y probando.
Tengo dos entidades una foto y otra messages.
Entidad Fotos:
Código PHP:
/**
* Fotos
*
* @ORM\Table(name="fotos")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Fotos
{
/**
* @ORM\ManyToOne(targetEntity="Acme\MessagesBundle\Entity\Messages", inversedBy="fotos")
* @ORM\JoinColumn(name="message_id", referencedColumnName="id")
*/
private $messages;
// ...
}
Código para FotosAdmin.php
Código PHP:
class FotosAdmin extends Admin
{
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('foto', 'file',array(
'required' => false,
'help' => $rutaFoto,
'label' => 'Foto '.$numero.' ',
'attr' => array(
'class' => 'nice_file_field',
// 'onchange'=>"readImage(this.form,this)",
// 'oninvalid'=>"setCustomValidity('Por favor escoge un nombre de usuario valido')"
)
))
->add('nombre','text',array(
'label' => 'Nombre la foto:',
'required' => false,
))
;
}
// ...
}
Entidad messages:
Código PHP:
/**
* Messages
*
* @ORM\Table(name="messages")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Messages
{
/**
* @var ArrayCollection $fotos
*
* @ORM\OneToMany(
* targetEntity="Acme\FotosBundle\Entity\Fotos",
* mappedBy="messages",
* cascade={"all"})
* orphanRemoval=true)
*@Assert\Valid()
*
*/
private $fotos;
/**
* @var ArrayCollection $videos
*
* @ORM\OneToMany(
* targetEntity="Acme\VideosBundle\Entity\Videos",
* mappedBy="messages",
* cascade={"all"},
* orphanRemoval=true)
*@Assert\Valid()
*
*/
private $videos;
// ...
public function __construct() {
$this->fotos = new ArrayCollection();
$this->videos = new ArrayCollection();
}
// ...
/**
* Set fotos
*
* @param string $fotos
* @return messages
*/
public function setFotos($fotos = null)
{
foreach ($fotos as $image) {
$image->setMessages($this);
}
public function addFotos(AcmeFotosBundleEntityFotos $fotos)
{
if(!$this->fotos->contains($fotos)){
$this->fotos[] = $fotos;
$fotos->setMessages($this);
}
return $this;
}
public function removeFotos(AcmeFotosBundleEntityFotos $fotos)
{
$this->fotos->removeElement($fotos);
$this->fotos->remove($fotos);
$fotos->setMessages(null);
if ($file = $this->fotos->getUploadRootDir($id)) {
unlink($file);
}
}
public function removeVideos(AcmeVideosBundleEntityVideos $videos)
{
$this->videos->removeElement($videos);
}
// ...
}
Formulario MessagesAdmin.php para SonataAdmin:
Código PHP:
class MessagesAdmin extends Admin
{
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
{
// ...
->Tab('Fotos', array('value'=>'Fotos'))
->with('Fotos', array(
'class' => 'col-md-12',
'description' => '',
'name' => 'Fotos'
))
->add('fotos', 'sonata_type_collection', array(
'by_reference' => false,
//'btn_add' => false,
'required' => false,
'cascade_validation' => true,
'label' => 'Fotos experiencias',
'type_options' => array('delete' => true,)
), array(
'edit' => 'inline',
// 'inline' => 'table',
'sortable' => 'position',
))
->end()
->end()
// ...
Bueno pues cuando marco el checkbox de Delete y lo doy actualizar no hace nada, lo peor de todo es que ni siquiera me da un error. Otra cosa la subida de imagen me va bien.
Pongo una captura de la imagen del
administrador.