Zend Framework

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-07-2017 15:24:42

samziceliza
Nouveau membre
Date d'inscription: 29-03-2017
Messages: 9

Appeler view helper dans un controller avec ZF3

Bonjour,

Tout est dans le titre, comment appeler un view helper dans un controller ?
j'ai essayé avec :

Code:

$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

 

#2 07-07-2017 08:24:07

JGreco
Modérateur
Date d'inscription: 22-12-2012
Messages: 411

Re: Appeler view helper dans un controller avec ZF3

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.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 07-07-2017 14:07:19

Théocrite
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 588
Site web

Re: Appeler view helper dans un controller avec ZF3

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

 

#4 07-07-2017 14:59:19

samziceliza
Nouveau membre
Date d'inscription: 29-03-2017
Messages: 9

Re: Appeler view helper dans un controller avec ZF3

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

 

#5 07-07-2017 16:38:16

Théocrite
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 588
Site web

Re: Appeler view helper dans un controller avec ZF3

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

 

#6 10-07-2017 16:13:36

samziceliza
Nouveau membre
Date d'inscription: 29-03-2017
Messages: 9

Re: Appeler view helper dans un controller avec ZF3

Merci pour vos retours rapides.

Voici un extrait de mon code :

Helper EmailCreationCompte.php :

Code:

<?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":

Code:

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

 

#7 10-07-2017 16:26:51

samziceliza
Nouveau membre
Date d'inscription: 29-03-2017
Messages: 9

Re: Appeler view helper dans un controller avec ZF3

Dans le fichier module.config.php j'ai déclaré mon helper

Code:

<?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

 

#8 11-07-2017 07:20:17

JGreco
Modérateur
Date d'inscription: 22-12-2012
Messages: 411

Re: Appeler view helper dans un controller avec ZF3

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)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#9 11-07-2017 09:46:01

samziceliza
Nouveau membre
Date d'inscription: 29-03-2017
Messages: 9

Re: Appeler view helper dans un controller avec ZF3

Je vais mettre en place un service, merci pour ces informations.

Bonne journée

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages