SonataMediaBundle Many to Many дополнительные поля ничего не работают

Есть ли способ легко обрабатывать изображение объекта с помощью пакета мультимедиа сонаты? Я пробую все решения, которые нахожу, но ничего не работает .... Многие проблемы: - невозможно удалить изображение из коллекции - невозможно каждый раз добавлять более одного файла - не отображаются эскизы

Этот комплект не прост в использовании, думаю, я перепишу другой комплект, на который больше не буду тратить время.

Я думаю, что делаю хорошее:

<?php

namespace Immo\FichierBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Immeuble
*
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Immo\FichierBundle\Entity\ImmeubleRepository")
 */
class Immeuble
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var integer
 *
 * @ORM\Column(name="numero", type="integer")
 */
private $numero;

/**
 * @var Immo\EtablissementBundle\Entity\Etablissement
 *
 * @ORM\OneToOne(targetEntity="Immo\EtablissementBundle\Entity\Etablissement", cascade={"persist"})
 */
private $agence;

/**
 * @var Immo\FichierBundle\Entity\Adresse
 *
 * @ORM\OneToOne(targetEntity="Immo\FichierBundle\Entity\Adresse", cascade={"persist"})
 */
private $adresse;

/**
 * @var string
 *
 * @ORM\Column(name="vente", type="string", length=255)
 */
private $vente;

/**
 * @var string
 *
 * @ORM\Column(name="coproindiv", type="string", length=255)
 */
private $coproindiv;

/**
 * @var string
 *
 * @ORM\Column(name="exregulier", type="string", length=255)
 */
private $exregulier;


/**
 * @var string
 *
 * @ORM\OneToMany(targetEntity="Immo\FichierBundle\Entity\ImmeubleHasPhoto", mappedBy="immeuble",cascade={"all"}) 
 * @ORM\OrderBy({"ordre"="ASC"})
 */
private $photos;

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

public function __toString() {
    return $this->getNumero().' '.$this->getAdresse();
}

/**
 * Constructor
 */
public function __construct()
{
    $this->photo = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Set numero
 *
 * @param integer $numero
 * @return Immeuble
 */
public function setNumero($numero)
{
    $this->numero = $numero;

    return $this;
}

/**
 * Get numero
 *
 * @return integer 
 */
public function getNumero()
{
    return $this->numero;
}

/**
 * Set agence
 *
 * @param Immo\EtablissementBundle\Entity\Etablissement $agence
 * @return Immeuble
 */
public function setAgence(\Immo\EtablissementBundle\Entity\Etablissement $agence)
{
    $this->agence = $agence;

    return $this;
}

/**
 * Get agence
 *
 * @return Immo\EtablissementBundle\Entity\Etablissement 
 */
public function getAgence()
{
    return $this->agence;
}

/**
 * Set adresse
 *
 * @param Immo\FichierBundle\Entity\Adresse $adresse
 * @return Immeuble
 */
public function setAdresse(\Immo\FichierBundle\Entity\Adresse $adresse)
{
    $this->adresse = $adresse;

    return $this;
}

/**
 * Get adresse
 *
 * @return Immo\FichierBundle\Entity\Adresse 
 */
public function getAdresse()
{
    return $this->adresse;
}

/**
 * Set vente
 *
 * @param string $vente
 * @return Immeuble
 */
public function setVente($vente)
{
    $this->vente = $vente;

    return $this;
}

/**
 * Get vente
 *
 * @return string 
 */
public function getVente()
{
    return $this->vente;
}

/**
 * Set coproindiv
 *
 * @param string $coproindiv
 * @return Immeuble
 */
public function setCoproindiv($coproindiv)
{
    $this->coproindiv = $coproindiv;

    return $this;
}

/**
 * Get coproindiv
 *
 * @return string 
 */
public function getCoproindiv()
{
    return $this->coproindiv;
}

/**
 * Set exregulier
 *
 * @param string $exregulier
 * @return Immeuble
 */
public function setExregulier($exregulier)
{
    $this->exregulier = $exregulier;

    return $this;
}

/**
 * Get exregulier
 *
 * @return string 
 */
public function getExregulier()
{
    return $this->exregulier;
}

/**
 * Addphoto
 *
 * @param \Immo\FichierBundle\Entity\ImmeubleHasPhoto $photo
 * @return Personne
 */
public function addPhotos(\Immo\FichierBundle\Entity\ImmeubleHasPhoto $photo)
{
    $photo->setImmeuble($this);
    $this->photos[] = $photo;

    return $this;
}

/**
 * Remove removePhoto
 *
 * @param \Immo\FichierBundle\Entity\ImmeubleHasPhoto $photo
 */
public function removePhotos(\Immo\FichierBundle\Entity\ImmeubleHasPhoto $photo)
{
    $this->photos->removeElement($photo);
}

/**
 * {@inheritdoc}
 */
public function setPhotos($photos)
{
    $this->photos = new ArrayCollection();

    foreach ($photos as $photo) {
        $this->addPhoto($photo);
    }
}

/**
 * Get photo
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getPhotos()
{
    return $this->photos;
}
}

Класс администратора:

/**
 * @param FormMapper $formMapper
 */
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->tab('Général')
            ->with('Général')
                ->add('numero')
                ->add('agence')
                ->add('adresse','sonata_type_model_list')
                ->add('vente')
                ->add('coproindiv')
                ->add('exregulier')
            ->end()
        ->end()
        ->tab('Photos')
            ->with('Liste photos')
                ->add('photos', 'sonata_type_collection', array(
                        'label' => false,
                        'type_options' => array('delete' => true),
                        'cascade_validation' => true,
                        'btn_add' => 'Ajouter une photo',
                        "required" => false
                    ), array(
                        'edit'              => 'inline',
                        'inline'            => 'table',
                        'sortable'          => 'ordre'
                    )
                )
            ->end()
        ->end()
    ;
}

Сущность соединения:

<?php

namespace Immo\FichierBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* ImmeubleHasPhoto
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Immo\FichierBundle\Entity\ImmeubleHasPhotoRepository")
*/
class ImmeubleHasPhoto
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="nom", type="string", length=255,nullable=true)
 */
private $nom;

/**
 * @var integer
 * @ORM\Column(name="ordre", type="integer")
 */
private $ordre;

/** 
 * @ORM\ManyToOne(targetEntity="Immeuble", inversedBy="photos",cascade={"all"},fetch="LAZY") 
 * @ORM\JoinColumn(name="immeuble_id", referencedColumnName="id", nullable=false) 
 */
private $immeuble;

 /**
 * @var \Application\Sonata\MediaBundle\Entity\Media
 * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media",cascade={"all"},fetch="LAZY")
 * @ORM\JoinColumn(name="photo_id", referencedColumnName="id", nullable=false) 
 */
private $photo;


public function __construct() {

}

public function __toString() {
    return $this->getNom();
}

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

public function setImmeuble(\Immo\FichierBundle\Entity\Immeuble $immeuble)
{
    $this->immeuble = $immeuble;

    return $this;
}

/**
 * Get Immeuble
 *
 * @return \Immo\FichierBundle\Entity\Immeuble 
 */
public function getImmeuble()
{
    return $this->immeuble;
}

/**
 * Set photo
 *
 * @param string $photo
 * @return Application\Sonata\MediaBundle\Entity\Media
 */
public function setPhoto(\Application\Sonata\MediaBundle\Entity\Media $photo=null)
{
    $this->photo = $photo;

    return $this;
}

/**
 * Get photo
 *
 * @return Application\Sonata\MediaBundle\Entity\Media 
 */
public function getPhoto()
{
    return $this->photo;
}

/**
 * Set nom
 *
 * @param string $nom
 * @return ImmeubleHasPhoto
 */
public function setNom($nom)
{
    $this->nom = $nom;

    return $this;
}

/**
 * Get nom
 *
 * @return string 
 */
public function getNom()
{
    return $this->nom;
}

/**
 * Set ordre
 *
 * @param integer $ordre
 * @return ImmeubleHasPhoto
 */
public function setOrdre($ordre)
{
    $this->ordre = $ordre;

    return $this;
}

/**
 * Get ordre
 *
 * @return integer 
 */
public function getOrdre()
{
    return $this->ordre;
}
}

И, наконец, класс администратора для моего объекта соединения:

/**
 * @param FormMapper $formMapper
 */
protected function configureFormFields(FormMapper $formMapper)
{
    $link_parameters = array();

    if ($this->hasParentFieldDescription()) {
        $link_parameters = $this->getParentFieldDescription()->getOption('link_parameters', array());
    }

    if ($this->hasRequest()) {
        $context = $this->getRequest()->get('context', null);

        if (null !== $context) {
            $link_parameters['context'] = $context;
        }
    }
    $formMapper
        ->add('nom',null,array('label'=>'Titre'))
        ->add('photo','sonata_type_model_list', array('required' => false), array(
        'link_parameters' => array('context' => 'Photos_immeuble')
        ))
        ->add('ordre','integer')
    ;
}

Что-то не так? Прошло много дней, чтобы понять, почему я не могу прикрепить изображение, но я ничего не нашел ... Я действительно думаю, что этот пакет не работает ...

Спасибо за вашу помощь.


person loic    schedule 20.05.2015    source источник
comment
См. demo of sonata project user / pass is admin, также не очень хорошая идея переписывать весь пакет, когда у вас уже есть один, попробуйте исправить свои ошибки. Я использовал пакет мультимедиа сонаты, и он действительно отлично подходит для многих и многих ассоциаций с пакетом мультимедиа _ 2_ также _ 3_   -  person M Khalid Junaid    schedule 09.06.2015