Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Tout est dans le titre, comment appeler un view helper dans un controller ?
j'ai essayé avec :
$view = new ViewModel(); $view->nomhelper($param);
Mais ça ne marche pas .
Merci par avance pour votre retour
Dernière modification par samziceliza (06-07-2017 15:25:23)
Hors ligne
Bonjour,
https://codingexplained.com/coding/php/ … ontrollers
Attention au fait que le serviceLocator ne peut être appelé ainsi dans zf3 tu dois donc injecter en dépendance le viewHelperManager tu peux aussi directement passer le helper que tu veux utiliser directement dans ta factory.
Hors ligne
Pourquoi ajouter un view helper dans un controller ?
Ne vaudrait-il pas mieux créer un service ? Par exemple, si je veux faire un strtolower des fois dans mon controller, des fois dans ma vue, je peux créer un LowerCaseFilter, et je l'injecte ensuite soit dans mon controller/middleware/view helper... et ensuite dans ces objets je fais $this->lowerCaseFilter->filter($string) et c'est bon !
Hors ligne
Bonjour,
Merci pour vos retours.
Dans un Controller je fais un envoie d'un email dont son corps en html est dans un helper pour éviter de dupliquer le code.
Mon site est déjà développé en zend 1, j'ai pu le réécrire en zend 3 il me manque juste le code qui me permettra d'appeler un helper via un controller.
j'ai déjà essayé avec getServiceLocator mais j'ai un message d'erreur.
Dernière modification par samziceliza (07-07-2017 15:00:47)
Hors ligne
Pour faire ça il n'aurait pas fallu un helper mais un Zend View plutôt (cf acelaya/ZF-AcMailer.
Pourrais-tu montrer ton code ? Ou du moins des extraits simplifiés ?
Pour le getServiceLocator, il faut utiliser une factory comme l'a déjà expliqué JGreco ci-dessus
Hors ligne
Merci pour vos retours rapides.
Voici un extrait de mon code :
Helper EmailCreationCompte.php :
<?php namespace Application\View\Helper; use Zend\View\Helper\AbstractHelper; class EmailCreationCompte extends AbstractHelper { public function __invoke($infosclient, $info) { $html = ' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Création de votre compte</title> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" yahoo="fix" style="font-family: Verdana, Geneva, sans-serif"> <p>Bonjour '.$infosclient['Prenom'].' '.$infosclient['nom'].',</p> <p>Nous vous confirmons la création de votre compte</p> </body> </html> '; return $html; } } ?>
Action creerespacepersonnel définit dans le controller "ClientController":
public function creerespacepersonnelAction(){ $xerfi = new Container('namespace'); $view = new ViewModel(); $form = new CreerEspacePersonnelForm(); if($this->getRequest()->isPost()) { $formData = $this->params()->fromPost(); $form->setData($formData); if($form->isValid()){ $db = new FunctionDBTable(); $infosclient = $db->ajouterEspacePersonnel($formData); [b]$email = $this->view->EmailCreationCompte($infosclient, 'createep'); <== Appel du helper EmailCreationCompte avec zf1[/b] $email = $html; $message = new Message(); $message->type = 'text/html'; $message->setEncoding("UTF-8") ->addTo($infosclient['email']) ->addFrom("etudes@xxxx.fr", "Groupe xxxx") ->setSubject("Rappel de vos identifiants"); $html = new MimePart($email); $html->type = "text/html"; $body = new MimeMessage(); $body->addPart($html); $message->setBody($body); $transport = new SmtpTransport(); $options = new SmtpOptions(array('name' => 'mail.gandi.net', 'host' => 'mail.gandi.net', 'port' => 587, 'connection_class' => 'login', 'connection_config' => array('username' => 'diffusion2@xxxx.com', 'password' => 'xxxxxxx!', 'ssl' => 'tls') )); $transport->setOptions($options); $transport->send($message); $this->redirect()->toUrl(BASEURL); } }else{ $this->redirect()->toUrl(BASEURL); } return $view; }
Pour le moment je ne sais pas comment appeler un helper avec une factory, je suis débutante en zf3.
Dernière modification par samziceliza (10-07-2017 16:15:16)
Hors ligne
Dans le fichier module.config.php j'ai déclaré mon helper
<?php namespace Application; use Zend\Router\Http\Literal; use Zend\Router\Http\Segment; //use Zend\Router\Http\Regex; use Zend\ServiceManager\Factory\InvokableFactory; return [ 'router' => [ 'routes' => [ 'home' => ['type' => Literal::class, 'options' => ['route' => '/', 'defaults' => ['controller' => Controller\IndexController::class, 'action' => 'index', 'valsearch' => '[a-zA-Z0-9_-]+', ], ], ], 'default' => ['type' => Segment::class, 'options' => ['route' => '/index[/:action][/:param][/:val][/:param2][/:val2]', 'defaults' => ['controller' => Controller\IndexController::class, 'action' => 'index'], ], ], 'client' => ['type' => Segment::class, 'options' => ['route' => '/client[/:action][/:param][/:val][/:param1][/:val1][/:param2][/:val2][/]', 'defaults' => ['controller' => Controller\ClientController::class, 'action' => 'index'], ], ], ], ], 'controllers' => [ 'factories' => [ Controller\IndexController::class => InvokableFactory::class, Controller\ClientController::class => InvokableFactory::class, ], ], // The following registers our custom view // helper classes in view plugin manager. 'view_helpers' => [ 'factories' => [ View\Helper\Header::class => InvokableFactory::class, View\Helper\RemoveAccents::class => InvokableFactory::class, View\Helper\CreerEspacePersonnel::class => InvokableFactory::class, View\Helper\LimitString::class => InvokableFactory::class, ], 'aliases' => [ 'header' => View\Helper\Header::class, 'removeAccents' => View\Helper\RemoveAccents::class, 'creerEspacePersonnel' => View\Helper\CreerEspacePersonnel::class, 'limitString' => View\Helper\LimitString::class, ], ], 'view_manager' => [ 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => [ 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ], 'template_path_stack' => [ __DIR__ . '/../view', ], ], ];
Hors ligne
Bonjour,
Je ne vois pas en quoi un view helper est necessaire ici. tu t'en sortirai très bien avec un partial et le viewrenderer en dépendance du controller(mais de préférence d'un service) pour faire la même chose.
Les factory ne sont pas propre à Zf3, mais à la programmation orienté objet en général, tu devrais te familiariser avec ce design pattern c'est sur-utilisé dans les framework dernière génération.
Dernière modification par JGreco (11-07-2017 09:11:45)
Hors ligne
Je vais mettre en place un service, merci pour ces informations.
Bonne journée
Hors ligne