La gestion simultanée de plusieurs uploads de fichier à Sonata Admin Bundle

Alors, après recherche beaucoup et n'obtenez pas de résultats (peut-être que je suis un mauvais chercheur) j'en provenance de ce sujet: SonataAdmin Bundle De Téléchargement De Fichier D'Erreur et SonataMediaBundle - comment télécharger des images? je ne peux pas trouver une solution à mon problème. J'ai une Entité Company et chaque entreprise peut avoir plusieurs fichiers: PDF, DOC, XLS et quelques autres/mime types. Je pense que pour utiliser VichUploaderBundle mais encore une fois docs ne couvre exemple pour une pour une relation donc ma question est, tout peut me donner des exemples ou les moyens d'obtenir ce fait? Je veux dire télécharger des fichiers et de les joindre à la société?

EDIT1 de travail et de tests

Comme je l'ai dit avant, je suis en train d'intégrer SonataMediaBundle dans un autre module de l'admin que j'ai, mais je ne peux pas le faire fonctionner. Ce que j'ai fait jusqu'à maintenant?

Bien sûr, d'installer et de configurer tous les bundles: SonataAdminBundle et SonataMediaBundle les deux fonctionnent très bien

Modifié \Application\Sonata\MediaBundle\Entity\Media.php classe pour ajouter les fonctionnalités requises par l'ajout d'une relation ManyToMany

namespace Application\Sonata\MediaBundle\Entity;

use Sonata\MediaBundle\Entity\BaseMedia as BaseMedia;
use Doctrine\ORM\Mapping as ORM;

class Media extends BaseMedia {

    /**
     * @var integer $id
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="PL\OrderBundle\Entity\Order", inversedBy="medias")
     * @ORM\JoinTable(name="order_has_media__media",
     *      joinColumns={@ORM\JoinColumn(name="media__media_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="order_no_order", referencedColumnName="no_order")}
     * )
     */
    protected $orders;

    public function __construct() {
        $this->orders = new \Doctrine\Common\Collections\ArrayCollection();
    }

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

    public function setOrders(\PL\OrderBundle\Entity\Order $order) {
        $this->orders[] = $order;
    }

    public function getOrders() {
        return $this->orders;
    }

}

L'ajout de champs dans le besoin PL\OrderBundle\Entity\Order.php comme suit:

namespace PL\OrderBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="tb_order")
*/
class Order {
/**
* @ORM\Id
* @ORM\Column(type="string", length=15, unique=true, nullable=false)
*/
protected $no_order;
/**
* @ORM\ManyToOne(targetEntity="PL\CompanyBundle\Entity\Company", inversedBy="id")
*/
protected $company;
/**
* @ORM\Column(type="string", length=15, unique=true)
*/
protected $business_case;
/**
* @ORM\Column(type="integer", length=1)
*/
protected $charge_status;
/**
* @ORM\Column(type="datetime")
*/
protected $eta;
/**
* @ORM\Column(type="datetime")
*/
protected $etd;
/**
* @ORM\Column(type="integer", length=1)
*/
protected $transport_media;
/**
* @ORM\Column(type="integer", length=1)
*/
protected $incoterm;
/**
* @ORM\Column(type="string", length=250)
*/
protected $comments;
/**
* @ORM\ManyToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="orders")
*/
protected $medias;
public function __construct() {
$this->medias = new \Doctrine\Common\Collections\ArrayCollection();
}
public function setNoOrder($no_order) {
$this->no_order = $no_order;
}
public function getNoOrder() {
return $this->no_order;
}
public function setCompany(\PL\CompanyBundle\Entity\Company $company) {
$this->company = $company;
}
public function getCompany() {
return $this->company;
}
public function setBusinessCase($business_case) {
$this->business_case = $business_case;
}
public function getBusinessCase() {
return $this->business_case;
}
public function setChargeStatus($charge_status) {
$this->charge_status = $charge_status;
}
public function getChargeStatus() {
return $this->charge_status;
}
public function setETA($eta) {
$this->eta = $eta;
}
public function getETA() {
return $this->eta;
}
public function setETD($etd) {
$this->etd = $etd;
}
public function getETD() {
return $this->etd;
}
public function setTransportMedia($transport_media) {
$this->transport_media = $transport_media;
}
public function getTransportMedia() {
return $this->transport_media;
}
public function setIncoterm($incoterm) {
$this->incoterm = $incoterm;
}
public function getIncoterm() {
return $this->incoterm;
}
public function setComments($comments) {
$this->comments = $comments;
}
public function getComments() {
return $this->comments;
}
public function setMedias(\Application\Sonata\MediaBundle\Entity\Media $media) {
$this->medias[] = $media;
}
public function addMedia(\Application\Sonata\MediaBundle\Entity\Media $media) {
$this->medias[] = $media;
}
public function getMedias() {
return $this->medias;
}
}

Changé le configureFormFields dans OrderAdmin.php fichier comme suit:

protected function configureFormFields(FormMapper $form) {
$form
->add('no_order', null, array('label' => 'No. Order'))
->add('company', 'entity', array('class' => 'PL\CompanyBundle\Entity\Company', 'label' => 'Cliente'))
->add('business_case', null, array('label' => 'BC'))
->add('charge_status', 'choice', array('choices' => array(
"empty_value" => "Seleccione una opción",
"0" => "Ninguno",
"1" => "Proceso de Fabricacion",
"2" => "Pickup en destino",
"3" => "A la espera de recojo por cliente",
"4" => "Carga en transito",
"5" => "Carga arribada",
"6" => "En proceso de aduana",
"7" => "Entregado a cliente",
"8" => "En bodega"
), "required" => true, 'label' => 'Estado de la carga'))
->add('eta', null, array('label' => 'ETD'))
->add('etd', null, array('label' => 'ETA'))
->add('transport_media', 'choice', array('choices' => array("empty_value" => "Seleccione una opción", "0" => "EXW", "1" => "Maritimo", "2" => "Aereo"), "required" => true, 'label' => 'Via de Transporte'))
->add('incoterm', 'choice', array('choices' => array(
"empty_value" => "Seleccione una opción",
"0" => "Ninguno",
"1" => "EWX",
"2" => "FOB",
"3" => "CIF",
"4" => "DDP"
), "required" => true, 'label' => 'Incoterm'))
->add('comments', null, array('label' => 'Comentarios'))
->add('medias', 'sonata_type_collection', array(
'label' => 'Documentos',
'type_options' => array('delete' => true)), array(
'edit' => 'inline', 'inline' => 'table', 'sortable' => 'position')
);
}

Mais cela ne marche pas puisque je ne peut pas télécharger n'importe quel fichier et c'est ce que j'ai envie de télécharger de nombreux fichiers à partir du même formulaire et le joindre à la commande, je suis en train de créer. Voir les photos ci-jointes pour un visuel que j'ai quand je accéder à l'action de création:

La gestion simultanée de plusieurs uploads de fichier à Sonata Admin Bundle
La gestion simultanée de plusieurs uploads de fichier à Sonata Admin Bundle

Ce que je suis absent?

C'est parfaitement possible, avec le SonataMediaBundle... Avez-vous essayer une?
Non, je n'essaie pas encore, avez-vous un exemple ou des documents concernant cette question?
Comme @GeertWille dit, vous pouvez le faire avec le SonataMediaBundle. Tout ce que vous devez faire est de faire un un-à-plusieurs relation entre la société et les fichiers. Ceci est fait par l'enregistrement d'une société de référence à vos fichiers en ligne, mais ce n'est pas la bonne façon. La meilleure chose que vous pouvez faire est de créer une table de lien entre vos fichiers et de la société. Après ceci est fait, vous avez juste besoin de libérer la puissance de la SonataAdminBundle.
vous pouvez prendre un coup d'oeil à mon montage?
J'ai fait comme vous l'avez suggéré, mais je suis coincé car je ne sais pas comment ajouter les fichiers directement à partir de OrderAdmin, un conseil?

OriginalL'auteur Reynier | 2014-02-11