slam4:php:codeigniter:doctrine

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
slam4:php:codeigniter:doctrine [2013/01/11 02:10] – [Génération des metadonnées de mapping] jcheronslam4:php:codeigniter:doctrine [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 109: Ligne 109:
  
 Logiquement, Doctrine est prêt à fonctionner.\\ Logiquement, Doctrine est prêt à fonctionner.\\
-Vérifier que la page d'accueil ne produit pas d'erreurs : http://localhost/doctrine_CI/+Vérifier que votre page d'accueil ne produit pas d'erreurs : http://localhost/siteURL/
  
 ===== Création des classes métier ===== ===== Création des classes métier =====
Ligne 261: Ligne 261:
 </code> </code>
  
-Tester en allant à l'adresse http://localhost/testPhp/utilisateurs/all/+Tester en allant à l'adresse /utilisateurs/all/
  
 {{:slam4:php:codeigniter:users-list.png?|}} {{:slam4:php:codeigniter:users-list.png?|}}
Ligne 557: Ligne 557:
  
 Les fichier yml associés à chaque table de la BDD doivent être présents dans le dossier application/models/Mappings : Les fichier yml associés à chaque table de la BDD doivent être présents dans le dossier application/models/Mappings :
-<sxh YAML;title:application/models/Mappings/Utilisateurs.dcm.yml>+<sxh bash;title:application/models/Mappings/Utilisateurs.dcm.yml>
 Utilisateurs: Utilisateurs:
   type: entity   type: entity
Ligne 619: Ligne 619:
   lifecycleCallbacks: {  }   lifecycleCallbacks: {  }
  
 +</sxh>
 +
 +<html><div class="info">
 +Il est également possible de générer les metadonnées de mapping au format xml :
 +</html>
 +<sxh bash;title:console>
 +php doctrine-cli.php orm:convert-mapping --from-database xml models/Mappings
 +</sxh>
 +<html>
 +</div></html>
 +==== Génération des classes ====
 +Nous allons maintenant générer les classes à partir des données de mapping :
 +Avant la génération, vérifier les données, et procédez à d'éventuelles corrections.
 +  * en mode console, exécuter l'instruction suivante :
 +
 +<sxh bash;title:console;gutter:false>
 +php doctrine-cli.php orm:generate-entities --generate-annotations=true models
 +</sxh>
 +L'exécution devrait retourner un résultat semblable à celui-ci :
 +<sxh bash;title:console>
 +Processing entity "Categories"
 +Processing entity "Droit"
 +Processing entity "Projet"
 +Processing entity "Utilisateurs"
 +
 +Entity classes generated to "C:\xampp\htdocs\doctrine_CI\application\models"
 +</sxh>
 +
 +Les classes sont générées dans application/models :
 +
 +<sxh php;title:application/models/Utilisateurs.php>
 +<?php
 +
 +
 +
 +use Doctrine\ORM\Mapping as ORM;
 +
 +/**
 + * Utilisateurs
 + */
 +class Utilisateurs
 +{
 +    /**
 +     * @var integer $id
 +     */
 +    private $id;
 +
 +    /**
 +     * @var string $prenom
 +     */
 +    private $prenom;
 +
 +    /**
 +     * @var date $dateinscription
 +     */
 +    private $dateinscription;
 +
 +    /**
 +     * @var integer $age
 +     */
 +    private $age;
 +
 +    /**
 +     * @var string $nom
 +     */
 +    private $nom;
 +
 +    /**
 +     * @var boolean $adulte
 +     */
 +    private $adulte;
 +
 +    /**
 +     * @var Categories
 +     */
 +    private $categorie;
 +
 +    /**
 +     * @var \Doctrine\Common\Collections\ArrayCollection
 +     */
 +    private $iddroit;
 +
 +    public function __construct()
 +    {
 +        $this->iddroit = new \Doctrine\Common\Collections\ArrayCollection();
 +    }
 +    
 +    /**
 +     * Get id
 +     *
 +     * @return integer 
 +     */
 +    public function getId()
 +    {
 +        return $this->id;
 +    }
 +
 +    /**
 +     * Set prenom
 +     *
 +     * @param string $prenom
 +     * @return Utilisateurs
 +     */
 +    public function setPrenom($prenom)
 +    {
 +        $this->prenom = $prenom;
 +        return $this;
 +    }
 +
 +    /**
 +     * Get prenom
 +     *
 +     * @return string 
 +     */
 +    public function getPrenom()
 +    {
 +        return $this->prenom;
 +    }
 +
 +    /**
 +     * Set dateinscription
 +     *
 +     * @param date $dateinscription
 +     * @return Utilisateurs
 +     */
 +    public function setDateinscription($dateinscription)
 +    {
 +        $this->dateinscription = $dateinscription;
 +        return $this;
 +    }
 +
 +    /**
 +     * Get dateinscription
 +     *
 +     * @return date 
 +     */
 +    public function getDateinscription()
 +    {
 +        return $this->dateinscription;
 +    }
 +
 +    /**
 +     * Set age
 +     *
 +     * @param integer $age
 +     * @return Utilisateurs
 +     */
 +    public function setAge($age)
 +    {
 +        $this->age = $age;
 +        return $this;
 +    }
 +
 +    /**
 +     * Get age
 +     *
 +     * @return integer 
 +     */
 +    public function getAge()
 +    {
 +        return $this->age;
 +    }
 +
 +    /**
 +     * Set nom
 +     *
 +     * @param string $nom
 +     * @return Utilisateurs
 +     */
 +    public function setNom($nom)
 +    {
 +        $this->nom = $nom;
 +        return $this;
 +    }
 +
 +    /**
 +     * Get nom
 +     *
 +     * @return string 
 +     */
 +    public function getNom()
 +    {
 +        return $this->nom;
 +    }
 +
 +    /**
 +     * Set adulte
 +     *
 +     * @param boolean $adulte
 +     * @return Utilisateurs
 +     */
 +    public function setAdulte($adulte)
 +    {
 +        $this->adulte = $adulte;
 +        return $this;
 +    }
 +
 +    /**
 +     * Get adulte
 +     *
 +     * @return boolean 
 +     */
 +    public function getAdulte()
 +    {
 +        return $this->adulte;
 +    }
 +
 +    /**
 +     * Set categorie
 +     *
 +     * @param Categories $categorie
 +     * @return Utilisateurs
 +     */
 +    public function setCategorie(\Categories $categorie = null)
 +    {
 +        $this->categorie = $categorie;
 +        return $this;
 +    }
 +
 +    /**
 +     * Get categorie
 +     *
 +     * @return Categories 
 +     */
 +    public function getCategorie()
 +    {
 +        return $this->categorie;
 +    }
 +
 +    /**
 +     * Add iddroit
 +     *
 +     * @param Droit $iddroit
 +     * @return Utilisateurs
 +     */
 +    public function addDroit(\Droit $iddroit)
 +    {
 +        $this->iddroit[] = $iddroit;
 +        return $this;
 +    }
 +
 +    /**
 +     * Get iddroit
 +     *
 +     * @return Doctrine\Common\Collections\Collection 
 +     */
 +    public function getIddroit()
 +    {
 +        return $this->iddroit;
 +    }
 +}
 +</sxh>
 +
 +  * Après génération, remettez le driver sur la position Annotations dans le fichier Doctrine.php :
 +
 +<sxh php;title:Extrait de Doctrine.php>
 +$driverImpl = $config->newDefaultAnnotationDriver(APPPATH.'models');
 +$config->setMetadataDriverImpl($driverImpl);
 +</sxh>
 +
 +===== Sérialisation, session php =====
 +
 +Pour permettre la sérialisation d'instances de models en session, il est nécessaire de respecter certaines étapes :
 +
 +==== Au niveau des models ====
 +
 +Sur-définir éventuellement la méthode magique **_sleep** des classes, pour définir les membres à sérialiser :
 +
 +<sxh php;Model utilisateur>
 +    public function __sleep(){
 +    return array('id','login','password','nom','prenom','mail','monde','groupe');
 +    }
 +</sxh>
 +
 +S'il faut également prévoir la sérialisation des objets dépendants, préciser CASCADE="ALL" et FETCH="EAGER" sur les annotations concernées :
 +
 +Exemple : sérialisation du groupe de l'utilisateur :
 +
 +<sxh php;Model utilisateur>
 +    /**
 +     * @var \Groupe
 +     *
 +     * @ManyToOne(targetEntity="Groupe",cascade={"all"}, fetch="EAGER")
 +     * @JoinColumns({
 +       @JoinColumn(name="groupe_id", referencedColumnName="id")
 +     * })
 +     */
 +    private $groupe;
 +</sxh>
 +
 +==== Sauvegarde en session ====
 +
 +Utilisation de **detach** :
 +<sxh php;sauvegarde dans un contrôleur>
 + public function save(){
 + $user=DAO\getOne("Utilisateur", 1);
 + $this->doctrine->em->detach($user);
 + $this->session->set_userdata("user",$user);
 + echo $user->getNom()." enregistré";
 + }
 +</sxh>
 +
 +
 +==== restauration depuis la session ====
 +
 +Utilisation de **merge** :
 +<sxh php;sauvegarde dans un contrôleur>
 + public function load(){
 + var_dump($this->session->all_userdata());
 + $user=$this->session->userdata("user");
 + $user=$this->doctrine->em->merge($user);
 + var_dump($user);
 + }
 </sxh> </sxh>
  • slam4/php/codeigniter/doctrine.1357866614.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)