Menu

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

Création d'un Bundle et une première page avec symfony 2.7

Introduction 

Dans cette article nous allons voir comment créer un bundle avec symfony 2.7 en utilisant le console ( invite de commande ) et aussi nous allons créer notre propre page.

Création d'un Bundle

pour créer un Bundle nous allons suivre les étapes suivants :
  • Ouvrir une fenêtre de commande sous le répertoire de votre projet ( shift + clic droite ) pour moi c'est Test2symfony  C:\wamp\www\Test2symfony.
  • Pour consulter la liste des commandes il suffit de taper php app/console et la commande que nous allons utilisé pour créer notre Bundle c'est :
    php app/console generate:bundle
    • Dans Bundle namespace  nous allons mettre Nom_du_Site/NomBundle
      le mot Bundle à la fin c'est obligatoire avec B en majuscule, pour moi je vais mettre
      Bundle namespace: Monsite/TestBundle
    • Bundle name : TestBundle 
    • Target directory : nous allons vu dans un article précédent que le code source de notre application vas être implémenter sous répertoire src donc cliquez sur Entrer.
    • Configuration format: vous pouvez choisir entre 4 configuration possible
      << xml, yml, php, annotation  >> je vous conseille de choisir YML c'est la meilleur configuration.
    • Pour le reste des étapes taper Yes jusqu’à la fin.
  • Maintenant vérifier le dossier SRC vous allez trouver un dossier Monsite et dans ce dossier vous trouvez TestBundle

Création une première page

La création d'une nouvelle page dans symfony2 est un simple processus de trois étapes.

Etape 1: Création de la route

Le fichier de configuration de routage de notre TestBundle est situé à : Src/MonSite/TestBundle/resources/config/routing.yml
page1:
    path:  /firstpage
    defaults: { _controller: TestBundle:First:page }

1ère ligne : page1 c'est le nom de la page ou aussi identifiant car deux page ne peuvent pas avoirs le même nom.
ème ligne/firstpage c'est le route il définit l'URL à votre page.
3ème ligne : c'est là où nous allons spécifier le nom du fonction à exécuter page elle doit être déclare dans FirstController du notre Bundle TesTbundle 

Etape 2: Créer le contrôleur

Quand  l'URL  /firstpage est gérée par l'application, la route firstpage est apparié et le contrôleur TestBundle:First:page est exécuté par le framework. La deuxième étape du processus de création de la page est de créer ce contrôleur

Le contrôleur  TestBundle:First:page est le nom logique du contrôleur, et elle correspond à la méthode pageAction de la classe PHP appelé Monsite\TestBundle\Controller\First. Commencez par créer ce fichier à l'intérieur de votre TestBundle:

Créer la méthode pageAction que Symfony va exécuter quand l'URL est  firstpage:

namespace Monsite\TestBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class FirstController
{
     return $this->render('TestBundle:First:premier.html.twig');
}

Etape 3 : Créer le modèle 

le contrôleur rend le TestBundle:First:premier.html.twig, qui utilise la convention de dénomination suivante :
                BundleName:ControllerName:TemplateName
il s'agit du nom logique du model qui est associé à un emplacement physique en utilisant la convention suivante.
                /Resources/views /ControllerName/templateName
Dans ce cas, TestBundle est le nom du bundle , First  est le contrôleur , et premier.html.twig le template.

{# src/Monsite/TestBundle/Resources/views/First/premier.html.twig #}


Bonjour c'est ma première page avec symfony2


Voici le vidéo de l'exemple :


Merci pour Votre Attention.

Php n'est pas reconnu comme commande interne ou externe

Introduction 

PHP n'est pas reconnu comme une commande interne ou externe est une erreur commune pour les utilisateurs de Windows utilisant wampserver.

Problème 

Quand un utilisateur utilise invite de commande pour exécuter une commande php un erreur est produit.

Solution

  1. Dans le menu Démarrer, cliquez droit sur "Poste de travail" et cliquez sur «Propriétés». 
  2. Paramétrés de système avancées puis sur -> avancés.
  3. Vous verrez l'image sur la droite pop up.
    Vers le bas, cliquez
    sur "Variables d'environnement».
  4. cliquez sur "Variable système" faites défiler la liste jusqu'à ce que vous voyez une variable appelée «path»
  5. Cliquez sur 'path' puis cliquez sur modifier et ajoutez votre "chemin php" pour moi le chemin est : C:\wamp\bin\php\php5.5.12
  6. Maintenant, pour la partie la plus importante. Assurez-vous que tout est sauvegardé, fermez-le et puis redémarrez votre ordinateur.

Maintenant que votre ordinateur a redémarré, essayer votre commande à nouveau.

Voici un vidéo pour mieux comprendre les étapes que nous avons fait.



Merci pour votre Attention.





Installtion de Symfony 2.7 en utilisant symfony Installer

Qu'est ce que symfony installer ?

C'est  une application php qui doit être installé dans votre système une seule fois et elle peut créer un nombre illimité d'applications Symfony.
Le programme d'installation requiert PHP 5.4 ou supérieur. Si vous utilisez encore la version héritage PHP 5.3, vous ne pouvez pas utiliser le programme d'installation de Symfony.

Installation du Symfony Installer ( Windows Systems ) .

Ouvrez votre console de commande sous C:/wamp/www/ et exécutez la commande suivante.


php -r "file_put_contents('symfony', file_get_contents('http://symfony.com/installer'));"
ou bien
php -r "readfile('http://symfony.com/installer');" > symfony

note:
 pour ouvrir votre console de commande dans un chemin spécifique Shift + clic droite

Création de l'application Symfony.

Une fois l'installation de Symfony est disponible, créer votre première application Symfony avec la commande suivante.
php symfony new TestSymfony

Cette commande crée un nouveau répertoire appelé TestSymfony qui contient un nouveau projet, basé sur la version la plus récente et stable de Symfony.

Si vous voulez une version spécifique de Symfony, utilisez le second argument optionnel de la commande:

php symfony new TestSymfony 2.7.5



Je vous remercie pour votre attention

Introduction à Symfony 2

Symfony2 est un puissant framework qui va vous permettre de réaliser des sites complexes rapidement, mais de façon structurée et avec un code clair et maintenable. En un mot : le paradis du développeur !




Liste des répertoires :

  • App :
    Ce répertoire contient tout ce qui concerne votre site Internet, c'est : la configuration, le cache, les fichiers logs, etc. Ce sont des fichiers qui concernent l'entièreté de votre site, contrairement aux fichiers de code source qui seront découpés par fonctionnalité de votre site
  • Vendors :
    Ce répertoire contient toutes les bibliothèques externes à notre application. Dans ces bibliothèques externes, j'inclus Symfony2 ! Vous pouvez parcourir ce répertoire ; vous y trouverez des bibliothèques comme Doctrine, Twig, SwiftMailer, etc.
  • Web :
    Ce répertoire contient tous les fichiers destinés à vos visiteurs : images, fichiers CSS et JavaScript, etc.
  • Src :
    Voici enfin le répertoire dans lequel on mettra le code source ! C'est ici qu'on vas développé notre application
Deux environnements de travail :
  • L'environnement de développement, appelé « dev », accessible en utilisant le contrôleur frontalapp_dev.php. C'est l'environnement que l'on utilisera toujours pour développer.
  • L'environnement de production, appelé « prod », accessible en utilisant le contrôleur frontalapp.php.