Menu

Affichage des articles dont le libellé est Application Symfony2. Afficher tous les articles
Affichage des articles dont le libellé est Application Symfony2. Afficher tous les articles

Application Symfony2 Part 9 : Créer un Système de Pagination

Introduction :

Nous allons voir dans ce Tuto comment créer un system de pagination ( KnpPaginatorBundle ) pour gérer le nombre de film à afficher dans une page web.

Installation et Configuration du KnpPaginatorBundle : 

Nous allons rendre visite au site http://knpbundles.com/ ou il y a plus que 2700 bundles à utiliser et intégrer dans notre applicationDans la zone de recherche tapez KnpPaginatorBundle
http://knpbundles.com/KnpLabs/KnpPaginatorBundle

  1. Tapez cette ligne de commande dans CMD
    php composer.phar require knplabs/knp-paginator-bundle
  2. Copier la configuration dans fichier config.yml de votre application.
    knp_paginator: page_range: 5 # default page range used in pagination control default_options: page_name: page # page query parameter name sort_field_name: sort # sort field query parameter name sort_direction_name: direction # sort direction query parameter name distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statements template: pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # sliding pagination controls template sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
  3. Activer le bundle dans Appkernel.php

    public function registerBundles() { return array( // ... new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(), // ... ); }
  4. Ajouter la fonction de pagination dans Controller

    public function indexAction() { $em = $this->getDoctrine()->getManager(); $request=$this->getRequest(); $listefilms = $em->getRepository('FilmoBundle:Film')->findAll(); $entities = $this->get('knp_paginator')->paginate(
    $listefilms,
    $request->query->get('page', 1)/*page number*/,
    6/*limit per page*/
    );
    return $this->render('FilmoBundle:Film:index.html.twig', array(
    'entities' => $entities, )); } Dans cette exemple nous allons appliquée le system de pagination à la $listeFilms pour afficher 6 films par page commençant par la page 1
  5. Implémenter le system de pagination dans View 

    {# display navigation #} <div class="navigation"> {{ knp_pagination_render(entities) }} </div>

Voici le vidéo de l'exemple :




Merci pour Votre Attention

x

Application Symfony2 : Part 8 Upload des fichier avec doctrine

Introduction 

Nous allons voir dans ce Tuto comment gérer l’upload des fichiers avec doctrine pour notre entité FILM

Mise à jour de l'entité Film et la base de données

Nous allons rendre visite au site Symfony.com et dans la zone de recherche tapez "upload file doctrine"
https://symfony.com/doc/2.7/cookbook/doctrine/file_uploads.html
Maintenant copier la variable path et les autres fonction dans votre entité Film
    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    public $path;

    public function getAbsolutePath()
    {
        return null === $this->path
            ? null
            : $this->getUploadRootDir().'/'.$this->path;
    }

    public function getWebPath()
    {
        return null === $this->path
            ? null
            : $this->getUploadDir().'/'.$this->path;
    }

    protected function getUploadRootDir()
    {
        // the absolute directory path where uploaded
        // documents should be saved
        return __DIR__.'/../../../../web/'.$this->getUploadDir();
    }

    protected function getUploadDir()
    {
        // get rid of the __DIR__ so it doesn't screw up
        // when displaying uploaded doc/image in the view.
        return 'uploads/films';
    }
  1. La variable path c’est le chemin de notre fichier 
  2. Changer le chemin d’upload dans fonction getUploadDir() uploads/films
  3. Maintenant nous allons ajouter un champ de type file dans FilmType.php
     ->add('file')
  4. Ajouter cette attribut à notre Entité film n'oublié pas les getters et setters et  les Use pour le cas des Assert et file.

    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
    
    

         /**
         * @Assert\File(maxSize="6000000")
         */
        private $file;
    
        /**
         * Sets file.
         *
         * @param UploadedFile $file
         */
        public function setFile(UploadedFile $file = null)
        {
            $this->file = $file;
        }
    
        /**
         * Get file.
         *
         * @return UploadedFile
         */
        public function getFile()
        {
            return $this->file;
        }
  5. Ajouter Fonction upload() dans Entité Film 
    public function upload()
    {
        if (null === $this->getFile()) {
            return;
        }
    
        $this->getFile()->move(
            $this->getUploadRootDir(),
            $this->getFile()->getClientOriginalName()
        );
    
        $this->path = $this->getFile()->getClientOriginalName();
    
        $this->file = null;
    }
  6. Dans Controller il faut faire un appel à la fonction upload dans la fonction createAction()
    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
    
        $entity->upload();
    
        $em->persist($entity);
        $em->flush();
    }
  7. Maintenant nous devons faire un mise à jour de la base de données
    php app/console doctrine:schema:update --force

Affichage dans View 

  1. <img src="{{ asset('uploads/films/'~entity.path) }}" >

    Le tilde " ~ " c’est pour faire la concatenation


Merci pour Votre Attention

Application Symfony2 : Part 2 Insertion et Affichage des Categories

Introduction


Au cours de la 2éme partie de ce tutoriel, nous allons voir comment insérer et afficher des catégories.

Insertion Des données


Plutôt que d'effectuer une requête 
INSERT INTO, nous allons utiliser la puissance de Symfony2 et de Doctrine pour ajouter des catégories de film.
d'abord nous allons préparer la structure générale d'une page :
Routing :



Controller :

Ce code montre comment travailler avec la doctrine à l'intérieur d'un contrôleur en utilisant la méthode getDoctrine (). Cette méthode est une raccourci pour obtenir le service de la doctrine.

ligne 13 : Cette ligne récupère l'objet de gestionnaire d'entités de la doctrine, qui est responsable de la gestion du processus de la persistance et de la récupération des objets vers et depuis la base de données.
lignes 15, 20, 25 : Dans ses lignes, vous instancier et  travailler avec l'objet $categorie comme un autre, objet PHP normal.
lignes 18, 23, 28 : persist () Méthode dit Doctrine de «gérer» l'objet $categorie. Cela ne provoque pas réellement une requête à apporter à la base de données.
ligne 30 : La méthode flush () est appelée, Doctrine regarde à travers tous les objets qu'il est la gestion pour voir si ils ont besoin d'être persisté à la base de données.
=> Lorsque vous appelez la méthode flush (), elle exécute les requêtes dans le bon ordre

View :

Symfony2 intègre le moteur de template Twig. Twig vous permet d'écrire, de modèles concis et lisible qui sont plus respectueux de concepteurs de sites Web et, à plusieurs égards, plus puissant que les modèles de PHP:

Afficher les données


Comme pour l'insertion nous allons passer par 3 étapes
  1. Routing
  2. Controller
  3. View
Routing :


Controller :

Vous pouvez penser à un "Repository" comme une classe PHP dont le seul travail est de vous aider récupérez des entités d'une certaine classe.

ligne 14 : findAll() récupérer tous les données dans l'objet Categorie  getRepository('FilmoBundle:Categorie')


View, Templating



Twig définit trois types de syntaxe particulière:
{{ ... }} Affichage 
{% ... %} Il est utilisé pour exécuter des instructions telles que boucles for par exemple.
{# ... #} il est l'équivalent de la PHP / * commentaire * / syntaxe. Il est utilisé pour ajouter des commentaires simples ou multi-lignes. Le contenu des commentaires ne sont pas inclus dans les pages rendus.

Voici le vidéo de l'exemple :




À la prochaine part 3 : Symfony2 et les formulaires (Objet Acteur)


Merci pour Votre Attention

Application Symfony2 Gestion des Films, Part 1 : Création des entités et les tables

Introduction

Au cours de ce tutorial, nous allons nous lancer dans la création d'une application web en utilisant le framework symfony2. Nous allons créer gestionnaire des films pas à pas:
  • Chaque film comportes un ou plusieurs acteurs
  • Chaque film est classé dans une Catégorie( Comédie, Science-fiction, etc )

MISE EN PLACE DE VOTRE BASE DE DONNÉES AVEC DOCTRINE

Nous allons commencer à créer les "Entity". En fait, symfony2 utilise doctrine pour communiquer avec la base de données MySQL. Doctrine est un ORM qui va nous permettre de traiter toutes nos tables comme de simples objets. Ainsi pour chacune des tables de notre application, nous devons créer sa représentation objet.

Les entités vont être créées dans le dossier Entity, donc, commençons par créer un dossier "Entity" dans notre bundle: "Gestion_Films/src/HTM/FilmoBundle/Entity"
L’application nécessitant 4 tables "Film", "Acteur", "Categorie" et "Film_Acteur" table d’association entre film et acteur
Nous allons créer les 3 class Film, Acteur et categorie pour la table film_acteur elle va être générer automatiquement.

Configuration de la base de données

Avant de commencer, vous aurez besoin de configurer vos informations de connexion de base de données. Par convention, cette information est généralement configurée dans un fichier
app/config/parameters.yml
Changer le nom de la base à : gestion_film
Maintenant que Doctrine connaît votre base de données, vous pouvez l'avoir créer

php app/console doctrine:database:create

Création des classes (Entité)

Vous pouvez avoir Doctrine créé des classes d'entités simples pour vous. Cela vous poser des questions interactives pour vous aider à construire une entité

php app/console doctrine:generate:entity

Gérer les relations :

class Film
{      
    //code du classe film
    /**
     * @ORM\ManyToOne(targetEntity="Categorie")
     * @ORM\JoinColumn(name="categorie_id", referencedColumnName="id")
     */
    Private $categorie;
    /**
     * @ORM\ManyToMany(targetEntity="Acteur")
     * @ORM\JoinTable(name="Film_Acteur")
     */
    Private $acteurs;

Génération des Getters et Setters:

Pour les deux attributs que nous avons déjà ajouté dans le class film il faut générer les Getters et Setters

php app/console doctrine:generate:entities FilmoBundle:Film
# ou bien
php app/console doctrine:generate:entities FilmoBundle 
# génère toutes les entités du FilmoBundle


Créer les tables de la base:

Doctrine peut créer automatiquement toutes les tables de base de données nécessaires pour chaque entité connue dans votre application. Pour ce faire, exécutez:

php app/console doctrine:schema:update --force

Voici le vidéo de l'exemple 







À la prochaine part 2 : Insertion et affichage des

données dans la base
Merci pour votre Attention