Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/10/2014, 15:37
Avatar de gachon
gachon
 
Fecha de Ingreso: septiembre-2004
Ubicación: En Google
Mensajes: 462
Antigüedad: 19 años, 8 meses
Puntos: 3
Pregunta Eliminar foto con sonata_type_colletion

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.