dev-master
9999999-devSymfony Upload Ajax Bundle
MIT
The Requires
- php >=5.3.8
- twig/twig *
- symfony/framework-bundle ^2.3 || ^3.0
ajax symfony upload
Symfony Upload Ajax Bundle
Ce bundle vous permettra d'ajouter des champs d'upload en ajax dans vos formulaires. Basé sur le plugin d'upload blueimp/jQuery-File-Upload, (*1)
Ajoutez le require
Ă votre fichier composer.json et lancer la commande composer update
, (*2)
# composer.json { // ... require: { // ... "bnbc/upload-bundle": "dev-master" } }
Ajoutez le bundle Ă votre kernel, (*3)
# app/AppKernel.php // in AppKernel::registerBundles() $bundles = array( // ... new Bnbc\UploadBundle\BnbcUploadBundle(), // ... );
Si cela n'a pas déjà été fais par composer, copiez les assets situés dans le dossier /vendor/bnbc/upload-bundle/Bnbc/UploadBundle/Resources/public/js
dans le dossier /web/bundles/bnbcupload/js
et ajoutez les fichiers javascripts à votre template, supprimez la ligne avec jQuery si vous l'avez déjà (requiert jQuery 1.6+)., (*4)
<script src="{{ asset('bundles/bnbcupload/js/1_jquery.min.js') }}"></script> <script src="{{ asset('bundles/bnbcupload/js/2_jquery.ui.widget.js') }}"></script> <script src="{{ asset('bundles/bnbcupload/js/3_jquery.iframe-transport.js') }}"></script> <script src="{{ asset('bundles/bnbcupload/js/4_jquery.fileupload.js') }}"></script> <script src="{{ asset('bundles/bnbcupload/js/5_init.js') }}"></script>
Ajouter la route, (*5)
# app/config/routing.yml bnbc_upload: resource: "@BnbcUploadBundle/Controller/" type: annotation prefix: /upload
Ajouter la ressource pour le type de champs bnbc_ajax_file
, (*6)
# app/config/config.yml twig: form_themes: - BnbcUploadBundle:Form:fields.html.twig
Conversion de tous les noms de fichiers en uniqid
DĂ©faut : false
, (*7)
Taille de fichier max en octets
DĂ©faut : null
(la limite dépendra alors des variables upload_max_filesize
et post_max_size
de votre php.ini)
Exemple : 10 * 1024 * 1024 = 10485760 représente (10 Mo), (*8)
Expression réguliÚre pour gérer les fichiers ou types de fichiers acceptés
DĂ©faut : '/.+$/i'
(Autorise tous les fichiers)
Exemple : '/\.(gif|jpe?g|png)$/i'
(Autorise uniquement les fichiers images gif, jpeg et png), (*9)
Dossier de téléversement des fichiers par rapport à la racine du dossier web
DĂ©faut : 'uploads'
Exemple : 'uploads/test'
(Il est possible d'indiquer des sous-dossiers, ils se créeront automatiquement), (*10)
Génération de formats supplémentaires, 3 formats possibles: thumbnail
, medium
, large
. Le paramĂštre crop
permet de recadrer l'image à la taille indiquée
DĂ©faut : null
Exemple :, (*11)
thumbnail: max_width: 100 max_height: 100 crop: true medium: max_width: 300 max_height: 300 crop: false large: max_width: 1024 max_height: 768 crop: false
# app/config/config.yml bnbc_upload: uniqid: true max_file_size: 10485760 accept_file_types: '/\.(gif|jpe?g|png)$/i' upload_folder: 'uploads/test' image_versions: thumbnail: max_width: 100 max_height: 100 crop: true medium: max_width: 300 max_height: 300 crop: false large: max_width: 1024 max_height: 768 crop: false
Ajouter un champs de type bnbc_ajax_file
Ă votre formulaire, (*12)
# Symfony 2 $formBuilder->add('myfield', 'bnbc_ajax_file'); # Symfony 3 $formBuilder->add('myfield', AjaxfileType::class);
Champs requis ou non
DĂ©faut : false
, (*13)
Affichage d'une barre de progression (calque qui voit sa largeur passer de 0 Ă 100%)
DĂ©faut : false
, (*14)
Classe(s) css pour la barre de progression (séparé par des espaces)
DĂ©faut : bnbc-ajax-file-progress
, (*15)
Position de la barre de progression, toutes les fonctions d'insertion jQuery sont autorisées
DĂ©faut : append
, (*16)
Nom de l'élément auquel on assigne un attribut de progression qui va de 0 à 100 : data-progress
DĂ©faut : null
, (*17)
Nom de l'Ă©lĂ©ment dans lequel le pourcentage de progression va ĂȘtre mis en texte
DĂ©faut : null
, (*18)
TĂ©lĂ©versement de plusieurs fichiers en mĂȘme temps
DĂ©faut : false
, (*19)
Label pour le bouton d'upload si vous souhaitez le personnaliser en css
DĂ©faut : null
, (*20)
Le(s) fichier(s) se téléverse(nt) automatiquement aprÚs avoir été ajouté, si false
un bouton de soumission apparait.
DĂ©faut : true
, (*21)
Affichage d'une zone de glisser/déposer
DĂ©faut : true
, (*22)
Texte la zone de glisser/déposer
DĂ©faut : 'Drop file(s) here'
, (*23)
Nom d'une fonction javascript à appeler une fois le téléversement terminé
DĂ©faut : null
Exemple : afterUpload
Utilisation dans un template : var afterUpload = function(files){};
oĂč files
est un tableau des fichiers téléversés, (*24)
Vous pouvez redéfinir les options de configuration globale pour chaque champs dans le paramÚtre formData
DĂ©faut : ne pas mettre le paramĂštre, (*25)
# Symfony 2 $formBuilder->add('myfield', 'bnbc_ajax_file', array( 'required' => false, 'progressBar' => false, 'progressBarClass' => 'bnbc-ajax-file-progress', 'progressBarPosition' => 'append', 'multiple' => false, 'label' => null, 'autoUpload' => true, 'dropZone' => true, 'dropZoneText' => 'Drop file(s) here', 'callbackFunction' => null, 'formData' => array( 'uniqid' => false, 'max_file_size' => 5 * 1024 * 1024, 'accept_file_types' => null, 'upload_folder' => 'test', 'image_versions' => array( 'thumbnail' => array( 'max_width' => 100, 'max_height' => 100, 'crop' => true ) ) ) ) ); # Symfony 3 $formBuilder->add('myfield', AjaxfileType::class, array( 'required' => false, 'progressBar' => false, 'progressBarClass' => 'bnbc-ajax-file-progress', ... ) );
A venir..., (*26)
/** * Creates a new entity. * * @Route("/new", name="admin_entity_new") * @Method({"GET", "POST"}) */ public function newAction(Request $request) { $entity = new Entity(); $form = $this->createForm('AdminBundle\Form\EntityType', $entity); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush($entity); if($entity->getPhoto()){ $entity->setPhoto($this->_movePhoto($entity)); } $em->flush($entity); return $this->redirectToRoute('admin_entity_show', array('id' => $entity->getId())); } return $this->render('AppBundle:entity:new.html.twig', array( 'entity' => $entity, 'form' => $form->createView(), )); } # Traitement de la photo protected function _movePhoto($data){ $fs = new Filesystem(); $dir = $this->get('kernel')->getRootDir() . '/../web/uploads/'; $coach_dir = $this->_createEntityFolder($data); # On dĂ©place la photo dans le dossier if($photo = $data->getPhoto()){ $ext = pathinfo($photo, PATHINFO_EXTENSION); $name = 'photo.' . $ext; # Si le fichier existe (il peut ne pas exister dans le cas d'une modification oĂč on uploaderai pas un nouveau fichier) if(file_exists($dir . $photo)){ $fs->copy($dir . $photo, $coach_dir . '/' . $name, true); $fs->remove($dir . $photo); } return $name; } else { return null; } } # CrĂ©ation du dossier pour accueillir l'image protected function _createEntityFolder($data){ $fs = new Filesystem(); $dir = $this->get('kernel')->getRootDir() . '/../web/data/entity/' . $data->getId(); try { $fs->mkdir($dir); } catch (IOExceptionInterface $e) { echo "Une erreur est survenue lors de la crĂ©ation du dossier : ". $e->getPath(); } return $dir; }
Symfony Upload Ajax Bundle
MIT
ajax symfony upload