IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

CallBack postLoad je cherche un exemple


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut CallBack postLoad je cherche un exemple
    Bonjour,

    je suis actuellement un tuto.

    Je ne vois pas bien ce que l'on peut déclarer après la récupération d'une ligne ou plus d'une entité car aucun exemple.

    j'ai regardé ici:
    http://doctrine-mongodb-odm.readthed...e.html#preload

    mais rien de concret juste la déclaration de la méthode, de plus parlent du preLoad alors que dans la liste de mon tuto cité plus haut, il n'y est pas.

    je souhaiterais des infos sur ce que l'on peu preload ou postload au moins un exemple.

    De plus vu que les callbacks de ce tuto sont définis dans les entités, cela veut il dire qu'après un callback en pre ou post on peut renvoyer une action vers une autre entité uniquement ou renvoyer une valeur dans le controller pour par exemple un flashbag.

    et la le pompom pour le site officiel de symfony: elle sont ou les infos explicatives sur les annotations callback à la sauce doctrine il ne trouve rien.
    il y a bien un exemple pour insérer ou updater une image donc prepersist ou preupdate mais preload ou postload je ne trouve toujours rien.
    il y a bien callback expliqué mais rien pour doctrine.

    J'ai regardé également en quête de vidéo explicative mais encore une fois choux blanc.

    ps: quelque soi le pilote dans un avion sans check list ou une avec des tel cas tu fais ... autre cas fais check .... bas il arrivera jamais.
    je suis ni devin ni médiome .

  2. #2
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Hello,

    PostLoad : Cet événement est appelé après qu'une entité ait été construite par l'EntityManager.

    Partant de là tu en fais ce que tu veux.
    Admettons que tu aies une entité qui possède de nombreux attributs et que tu veuilles stocker le résultat d'une opération complexe dans un attribut non mappé de cette classe pour pouvoir le réutiliser dans d'autres services ou ton entité est utilisée. C'est un moyen comme un autre de le faire.
    Admettons que tu veuilles modifier la valeur d'un attribut en fonction d'autres attributs de ta classe, tu peux aussi passer par là.

    Qu'est-ce que tu veux de plus ? Est-ce que tu en as besoin ? Est-ce que tu as une problématique concrète ou on pourrait t'aider à le mettre en place ? Ce serait plus simple que d'essayer de décortiquer chaque minuscule petite partie du Framework avec des exemples.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    Merci beaucoup Nico pour toute tes informations précieuses.

    Oui je suis assez flou car je découvre le sujet et ai du mal à visualiser l'intérêt de chacun.
    Un besoin réel pour le moment non, je suis des tutos et essaye de comprendre.
    Je creuse le sujet pour des détailles et un exemple à traité et reviendrais vers vous.

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    voici un exemple:

    1 controller & 1 entité "article"

    dans le première exemple j'utilise le controller pour setter mes attributs, alors que dans le 2ème, j'utilise un prePersist dans l'entité.

    1er ex:

    controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <?php
     
    namespace test\exoBundle\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use\Symfony\component\httpfoundation\request;
    use\Symfony\component\httpfoundation\response;
    use test\exoBundle\Entity\article;
     
    class DefaultController extends Controller
    {
        public function creationAction(request $request)
        {
        	$em = $this->getDoctrine()->getManager();
        	$article = new article;
     
        	if($request->isMethod("POST"))
        	{
    	    	$article->setNom($_POST["nom"]);
    	    	$article->setType($_POST["type"]);
    	    	$em->persist($article);
    	    	$em->flush();
    	    	return $this->redirect($this->generateUrl('index'));
        	}
            return $this->render('exoBundle:Default:creationProduit.html.twig');
        }
    }
    ?>
    entité article

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    <?php
     
    namespace test\exoBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * article
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="test\exoBundle\Entity\articleRepository")
     * @ORM\hasLifecycleCallbacks()
     */
    class article
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="nom", type="string", length=255, nullable=false)
         */
        private $nom;
     
        /**
         * @var string
         *
         * @ORM\Column(name="type", type="string", length=255)
         */
        private $type;
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set nom
         *
         * @param string $nom
         * @return article
         */
        public function setNom($nom)
        {
            $this->nom = $nom;
     
            return $this;
        }
     
        /**
         * Get nom
         *
         * @return string 
         */
        public function getNom()
        {
            return $this->nom;
        }
     
        /**
         * Set type
         *
         * @param string $type
         * @return article
         */
        public function setType($type)
        {
            $this->type = $type;
     
            return $this;
        }
     
        /**
         * Get type
         *
         * @return string 
         */
        public function getType()
        {
            return $this->type;
        }
    }
    2ème ex:

    controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public function creationAction(request $request)
        {
        	$em = $this->getDoctrine()->getManager();
        	$article = new article;
     
        	if($request->isMethod("POST"))
        	{
    	    	$em->persist($article);
    	    	$em->flush();
    	    	return $this->redirect($this->generateUrl('index'));
        	}
            return $this->render('exoBundle:Default:creationProduit.html.twig');
        }
    entité article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    <?php
     
    namespace test\exoBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * article
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="test\exoBundle\Entity\articleRepository")
     * @ORM\hasLifecycleCallbacks()
     */
    class article
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="nom", type="string", length=255, nullable=false)
         */
        private $nom;
     
        /**
         * @var string
         *
         * @ORM\Column(name="type", type="string", length=255)
         */
        private $type;
     
        /**
         * @ORM\prePersist
         */
        public function creationProduit()
        {
            $this->setNom($_POST["nom"]);
            $this->setType($_POST["type"]);
        }
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set nom
         *
         * @param string $nom
         * @return article
         */
        public function setNom($nom)
        {
            $this->nom = $nom;
     
            return $this;
        }
     
        /**
         * Get nom
         *
         * @return string 
         */
        public function getNom()
        {
            return $this->nom;
        }
     
        /**
         * Set type
         *
         * @param string $type
         * @return article
         */
        public function setType($type)
        {
            $this->type = $type;
     
            return $this;
        }
     
        /**
         * Get type
         *
         * @return string 
         */
        public function getType()
        {
            return $this->type;
        }
    }
    voila dans mon 2ème exemple je persist ma nouvelle entré avec une annotation prePersist ce qui me donne le même résultat.
    donc est ce une bonne façon de faire et dans quel contexte réel avons nous besoin d'un callback.

    autre exemple: admettons que j'ai un attribut "date de modification".
    Je pourrais très bien le set à chaque update de la methode de mon controller, tout comme le déclarer dans une méthode prePersist dans mon entité article.

    De plus si dans l'une de mes méthodes pre ou postpersist update .... je retourne une valeur, pour alimenter un flashbag par exemple, comment le récupérer dans le controller.

Discussions similaires

  1. mysql et C " cherche un exemple de teste"
    Par prg12 dans le forum C
    Réponses: 5
    Dernier message: 03/03/2007, 11h39
  2. Réponses: 2
    Dernier message: 26/01/2007, 18h54
  3. Cherche un exemple d'utilisation de TAction
    Par ssakhri dans le forum Delphi
    Réponses: 2
    Dernier message: 18/11/2006, 19h52
  4. PHP ou Perl: Cherche petit exemple tout con.
    Par fifto dans le forum Web
    Réponses: 15
    Dernier message: 28/03/2006, 21h35
  5. Je cherche un exemple de FocusListener...
    Par iMaTh dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 22/01/2006, 22h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo