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 :

Appeler le conteneur dans un service [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut Appeler le conteneur dans un service
    Bonjour,
    je veux que lorsque un utilisateur s"inscrit , il reçoit un mail de confirmation.
    Je cherche pas de solution liée au FOSUSer .
    En contrôleur j'ai mis :
    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
     
      public function registerAction(Request $request) {
            $manager = $this->get('collectify_security_manager');
     
            $em = $this->getDoctrine()->getManager();
            $user = new Utilisateur();
            $form = $this->createFormBuilder()
                    ->add('login', 'text', array(
                        'required' => TRUE,
                        'attr' => array(
                            'placeholder' => 'What\'s your name?',
                            'pattern' => '.{5,}' //minlength
                        )
                    ))
                    ->add('email', 'email', array(
                        'required' => TRUE,
                        'attr' => array(
                            'placeholder' => 'So I can get back to you.'
                        )
                    ))
                    ->add('password', 'repeated', array(
                        'required' => TRUE,
                        'type' => 'password',
                        'invalid_message' => 'Les mots de passe doivent correspondre',
                        'options' => array('required' => true),
                        'first_options' => array('label' => 'Mot de passe'),
                        'second_options' => array('label' => 'Mot de passe (validation)'),)
                    )
                    ->getForm();
     
            $request = $this->getRequest();
            $form->bind($request);
     
            $login = $form["login"]->getData();
            $email = $form["email"]->getData();
            $password = $form["password"]->getData();
     
            $OK = false;
            if (($login != NULL) && ($email != NULL) && ($password != NULL)) {
                $user->setLogin($login);
                $user->setEmail($email);
                $user->setPassword(sha1(md5($password)));
                $user->setPrivilege('ADMIN');
                $user->setEnabled(TRUE);
                $user->setDatelog(new \DateTime());
                $EXISTE = $manager->donneruservalid($user);
                if ($EXISTE != TRUE) {
                    $em->persist($user);
                    $em->flush();     
                    $OK = TRUE;
                      $managermail = $this->get('collectify_mail_manager');
                      $managermail->envoiMail($user);  /// renvoie de mail au membre  
                } else {
                    $this->get('session')->getFlashBag()->set('message', 'Existe déja');
                }
            }
            if ($OK === TRUE) {
                $session = new Session();
                $session->clear(); /// detruire la session avant de la start
                $session->start();
                $session->set('user', $user);
     
                return $this->redirect($this->generateUrl('my_app_backoffice_homepage'));
            } else {
                return $this->render('MyAppBackofficeBundle:admin:register.html.twig', array(
                            'form' => $form->createView()
                ));
            }
        }
    et dans le service mail , j"ai:
    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
    class Mail {
     
        protected $container;
     
        public function setContainer($container) {
            $this->container = $container;
        }
     
        public function __construct() {
        }
     
        public function envoiMail($user) {
            $mailer = $this->container->get('mailer');
            $transport = \Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');
            $mailer = \Swift_Mailer::newInstance($transport);
            $message = \Swift_Message::newInstance('Test')
                    ->setSubject('Confirmation de l\'inscription')
                    ->setFrom('admin@gmail.tn')
                    ->setTo($user->getEmail())
                    ->setBody('Pour activer votre compte veuiller cliquer sur le lien ');
            $this->get('mailer')->send($message);
            /**      mail de confirmation    * */
        }
     
    }
    j"ai des exceptions comme :
    Error: Call to a member function get() on a non-object
    Notice: Undefined property: :$container ..

    merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 133
    Par défaut
    Salut,

    Pour passer le container de services à un service quelconque, c'est très simple.Tu le mets directement dans le constructeur comme n'importe quel service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fooService:
        class: Baz\BarBundle\Foo
        arguments: [@service_container]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Foo
    {
        protected $container;
     
        public function __construct($container) 
        {
            $this->container = $container;
        }
    }
    Il y a aussi un moyen de faire avec ContainerAware mais personnellement je préfère la solution ci-dessus pour sa clarté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Appeler un service dans un service
    Par siva_dashq dans le forum Symfony
    Réponses: 2
    Dernier message: 16/12/2014, 16h42
  2. Réponses: 5
    Dernier message: 15/09/2014, 18h59
  3. Réponses: 2
    Dernier message: 02/08/2004, 17h34
  4. Réponses: 3
    Dernier message: 23/06/2004, 21h17
  5. Appel de procédure dans une page ASP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2004, 16h59

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