Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-12-2015 16:00:46

Cawet
Nouveau membre
Date d'inscription: 29-12-2015
Messages: 3

Configuration de l'aide de vue "url" utilisé en mode console.

Bonjour,

J'ai crée un module de newLetter pour  envoyer des milliers de mails personnalisés à partir de données utilisateur.

Je devais pouvoir "templater" ces mails de la même façons que n'importe quelle page du site,   et je doit pouvoir envoyer ces série de mail en invite de commande en utilisant différent paramètre.   

Pour résumer le mécanisme mis en place :
- J'ai un controller dont les actions sont des commandes destinées au shell,
- ce controller fait appel à un service pour construire une chaine de caractère HTML a partir de template placé dans le dossier view et de donnée récuperer dans la BDD,  et ceci grace au PhpRenderer,
- puis il envoi cette chaine par mail en smtp au bonne personne .

Pas de problème dans le fonctionnement général, jusqu'au moment ou j'ai eu besoin d'utiliser l'aide de vue "url", (ex:  $this->url('ma/route'); ) .

En effet, la configuration de route utilisé à ce moment la par phpRenderer est celle...de la console. Or, je veut bien évidement envoyé des lien du sites, non les commandes à utilisé dans le shell 


Code:

[lang=php]
//la configuration que je souhaite être utiliser par les aide de vue du PhpRenderer :
    'router' => [
        'routes' => [
            'maroute' => [
                'route' => 'ma/route'
            ]
        ]
    ],

//Celle qu'il utilise, en utilisant la console
    'console' => [
        'router' => [
            'routes' => [
                'commande01' => [
                    'route' => 'commande01 <option1>'
                ]
            ]
        ]
    ]
]

pour être certain que le rendu prenne bien en compte ma configuration, j'utilise le renderer déjà tout bien configurer :

Code:

[lang=php]
      $renderer =      $serviceLocator->get('Zend\View\Renderer\RendererInterface')

Avec ce renderer, je suis tranquille pour utiliser mes propre aide de vue, et la bonne config, sauf pour le URLHelper !

je me suis dit qu'il me falait donc que je configure mon propre phpRenderer, mais impossible de le faire correctement !

Code:

[lang=php]

//ce code n'est peut être pas fonctionnel mais c'est pour le principe : 
$renderer = new PhpRenderer();

        $resolver = new Resolver\AggregateResolver();

        $renderer->setResolver($resolver);

        $map = new Resolver\TemplateMapResolver($this->config['view_manager']['template_map']); //tableau de tout les fichier de config compiler
        $stack = new Resolver\TemplatePathStack($this->config['view_manager']['template_path_stack']);

        $resolver->attach($map)    
        ->attach($stack)
            ->attach($map)   
            ->attach($stack);

Comment configurer, les aide de vue, et que de plus l'url helper utliise bien la bonne configuration de route ?

N'hésitez pas a me dire si c'est pas clair !

Dernière modification par Cawet (29-12-2015 16:02:51)

Hors ligne

 

#2 30-12-2015 17:02:44

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Configuration de l'aide de vue "url" utilisé en mode console.

Bon ba je m'auto-répond !
déjà autant pour moi, ce n'est pas possible d'appeler le viewRenderer en mode console, autant pour moi x)

Pour ceux que sa intéresse, dans le factory de mon service:

Code:

[lang=php]
public function getRenderer($serviceLocator){

        $renderer = new PhpRenderer();

        $renderer->setHelperPluginManager($serviceLocator->get('ViewHelperManager'));
        $renderer->setResolver($serviceLocator->get('ViewResolver'));

        return $renderer;
    }

et pour utiliser l'urlHelper, personnement j'avait déjà un urlHelper pesonnalisé et donc il ma simplement fallu modiffié son factory, mais peut être y a t'il d'autre solution :

Code:

[lang=php]
  public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $urlHelper = new MyUrlHelper($serviceLocator->get('myOwnService'));

        //en mode console, le router est celui de la console. HttpRouter permet alors de récuperer celui qui nous intéresse pour écrire des url!
        $routerName = Console::isConsole() ? 'httpRouter' : 'router';

        $urlHelper->setRouter($serviceLocator->getServiceLocator()->get($routerName));

        
        //en mode Http, l'url helper à besoin d'un routeMath pour savoir si l'url a construire est celle de la page courante 
        //sinon c'est inutile

        $routeMatch = null;
        if(!Console::isConsole()){
            $routeMatch = $serviceLocator->getServiceLocator()
                ->get('application')
                ->getMvcEvent()
                ->getRouteMatch();
        }  
        
        
        if ($routeMatch)
            $urlHelper->setRouteMatch($routeMatch);

        return $urlHelper;
    }

en espérant que sa serve a quelqu'un.

A plus !

Hors ligne

 

#3 31-12-2015 14:04:06

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Configuration de l'aide de vue "url" utilisé en mode console.

Bien joué,

J'aurais été incapable de t'aider sur ce coup. Désolé


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

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