Bonjour à tous,
Mon problème est "simple", j'ai une action dans laquelle j'envoi un email, et je veux que le corps du message proviennent d'une vue afin de profiter des helpers etc ... seulement je ne trouve pas la bonne méthode.
Ma solution 1 était de récupérer via le service_manager le view_manager mais cette méthode corrompt mon affichage principal, car la vue de mon action n'est plus rendue et cela désactive le layout, voici le code :
ma solution 2 était d'utiliser le code suivant, mais avec cette méthode mes aides de vue et celles injectés par Zend\i18n\Translator ne sont plus disponibles (et la méthode setBroker(Zend\View\HelperBroker $broker) semble ne plus être dispo )
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 public function forgottenpassAction() { $vm = new ViewModel (); $form = new ResetPasswordForm ( $this->getRequest ()->getBaseUrl () . '/auth/generatecaptcha/id' ); $request = $this->getRequest (); if ($request->isPost ()) { $form->setData ( $request->getPost () ); if ($form->isValid ()) { $user = $this->getUserTable ()->getUserByEmail ( $request->getPost ( "email" ) ); $user->resetcode = md5 ( $user->genPassword ( 20 ) ); $user->resetcodets = time (); $this->getUserTable ()->saveUser ( $user ); $view = $this->serviceLocator->get ( 'ViewManager' )->getView (); $mailTemplate = new ViewModel (); $mailTemplate->setTemplate ( "fo/auth/mail-resetpass" ); $mailTemplate->setVariable ( "user", $user ); $mailTemplate->setCaptureTo ( "waza" ); $message = $view->render ( $mailTemplate ); $this->serviceLocator->get ( "Mailer" )->send ( $request->getPost ( "email" ), _ ( "Reset your password" ), $message ); $vm->setTemplate ( "fo/auth/forgottenpassmailsent" ); return $vm; } } $vm->setVariable ( "form", $form ); return $vm; }
... :
merci pour votre aide
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 public function forgottenpassAction() { $vm = new ViewModel (); $form = new ResetPasswordForm ( $this->getRequest ()->getBaseUrl () . '/auth/generatecaptcha/id' ); //\Zend\Debug\Debug::dump( $this->serviceLocator->getCanonicalNames() ); //\Zend\Debug\Debug::dump( $this->serviceLocator->getRegisteredServices() ); $request = $this->getRequest (); if ($request->isPost ()) { // set data post $form->setData ( $request->getPost () ); if ($form->isValid ()) { $user = $this->getUserTable ()->getUserByEmail ( $request->getPost ( "email" ) ); $user->resetcode = md5 ( $user->genPassword ( 20 ) ); $user->resetcodets = time (); $this->getUserTable ()->saveUser ( $user ); $map = new Resolver\TemplateMapResolver(array( 'mail' => './module/Fo/view/fo/auth/mail-resetpass.phtml', )); $resolver = new Resolver\TemplateMapResolver($map); $phpRenderer = new Renderer\PhpRenderer(); $phpRenderer->setResolver($resolver); $mailTemplate = new ViewModel(); $mailTemplate->setTemplate("mail"); $mailTemplate->setVariable("user", $user); $message = $phpRenderer->render($mailTemplate); echo $message; $this->serviceLocator->get ( "Mailer" )->send ( $request->getPost ( "email" ), _ ( "Reset your password" ), $message ); $vm->setTemplate ( "fo/auth/forgottenpassmailsent" ); return $vm; } } $vm->setVariable ( "form", $form ); return $vm; }
EDIT : c'est résolu, il suffit de setter correctement le helperViewManager.
bien à vous
Partager