Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-03-2016 11:03:54

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

Changer le chemin de la template de la vue d'un controller

Hello,

La stratégie classique de zf2 est la suivante quand il agit de définir le chemin du template d'une vue qui n'a pas été précisé (sois via la "template_map", sois via la $viewModel->setTemplate() depuis une action) :

nom-du-controller/nom-de-l-action.phtml.

Je ne vous apprend rien, mais j'aimerai changer sa pour un module.
Si c'est une vue du controller foo, je veut finalement qu'il aille dans bar/bu , ce pour toute les action.


Par exemple sa aurrai pu être via ce type de configuration :

view_manager=>[
  'template_map'=>[
       'mon-controller-foo/*=> 'bar/bu/'
   ]
]
Ma finalité est, entre autre, de faire partager les même vue a deux contrôler différent ^^.

EDIT:
oups, c'est nom-module/nom-du-controller/nom-de-l-action.phtml., et non "nom-du-controller/nom-de-l-action.phtml.". mais vous avez compris le principe !
"

Dernière modification par Splyf (17-03-2016 11:19:08)

Hors ligne

 

#2 17-03-2016 11:20:57

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

Re: Changer le chemin de la template de la vue d'un controller

Salut,

J'ai eu les mêmes problème et j'ai pu bien bosser la couche vue de zf2. J'ia plusieurs interrogation quant à ce que tu demandes.

Si deux de tes contrôleur utilise les mêmes vues ne peux tu pas utiliser le plugin de controlleur forward ? En gros si tu as deux vue a charger dans deux contrôleurs c'est qu'au final le contrôleur responsable de cette vue est appelée par ton second contrôleur qui n'en as pas la responsabilité.

http://www.michaelgallego.fr/blog/2012/ … ar-widget/


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

Hors ligne

 

#3 17-03-2016 13:50:11

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

Re: Changer le chemin de la template de la vue d'un controller

Hm, j'avais vue ce forward quelque part mais complètement oublié sont existence !

Sa pourrai  marcher parfaitement !
Mais ce qui m’ennuie c'est que mes deux controller n'ont pas du tout les même processus pour déterminer les paramètre de la vue utiliser. (il ne font pas  appel au même services).

Donc je doit recalculer et remplacer tout les paramètre de la vue récupérer après le forward, sa fait doublé le travail. Ou alors il faudrait que je rajoute d'autre paramètre d'action dans le 1er contrôler, mais sa signifie placé tout le code des deux controller en un seul, et donc j'ai plus la segmentation voulue au départ autant avoir 1 controller et reconfigurer les route ^^.

Ton lien propose aussi de passé par une vue.
Mais une aide de vue n'est pas fait a la base pour un travail de controller, il faut donc casi systématiquement injecter ce que possède nativement un controller (genre les service Request et RouteMatch).

J'ai presque envie de faire un plugin qui me génère le chemin de template en fonction de l'action et controller courant.
mais j'aimerai évité de repassé dans chaqu'une de mes action, autant réécrire manuelement les chemin a chaque foi.

Le truc parfait serrai que je me glisse juste après l'appel des action de mes deux controller et que je re définissent le chemin du viewModel à ce moment la.

Hors ligne

 

#4 18-03-2016 09:23:53

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Changer le chemin de la template de la vue d'un controller

Hellow!

Pourquoi ne pas passer par un View Helper partial?

Un truc du type :

VueControler1/vue.phtml -> inclu partial('bar/bu/...');
VueControler2/other-vue.phtml -> inclu partial('bar/bu/...');

Hors ligne

 

#5 18-03-2016 10:47:50

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

Re: Changer le chemin de la template de la vue d'un controller

Salut,

A oui tien.
Mais comment faire alors pour les paramètre de vue ?

function salateAction(){
return [
       'carrotte'=>'rapé',
       'pattate'=>''sauté'
];
}


salade.phtml
$this->partial('bar/bu' , [
  'carotte'=>'$carrotte,
  'patate'=>$patate
]);

Peut on récuperer les paramêtre d'une vue parente sans avoir a les injecter ? :s

(mais sinon, au moins pour ma culture G, pas moyen de se "glissé" juste après l'appel d'une action? ici pour modifié le template de la vue retourné).

Hors ligne

 

#6 18-03-2016 10:57:04

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Changer le chemin de la template de la vue d'un controller

Pas moyen de se "glisser" à ma connaissance xD
Pour modifier les template tu a une fonction prévu pour ça, setTemplate je crois.

tu peu faire ça :

Code:

[lang=php]
function salateAction(){
return [
    'params' => array(
       'carrotte'=>'rapé',
       'pattate'=>''sauté'
    )
];
}


salade.phtml
$this->partial('bar/bu' , [
  'params'=>$params,
]);

Mais au premier coup d'oeil, je ne vois pas bien l’intérêt d'une vue commune qui n'attends pas les même paramètres.. =x

Peut être que cette vue commune tu peu la séparer en différents views helpers qui ne reprendront que les htmls communs.

Hors ligne

 

#7 18-03-2016 11:00:33

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

Re: Changer le chemin de la template de la vue d'un controller

Bon le matin on a les idée plus clair.

J'ai relu tout bien le topic de Jgreco...merci a toi smile.
Le probleme que j'évoque n'est qu'un probleme de conseption, j'avais pas compris l'idée je pense. Je n'ai qu'a passé par un 3eme controller, qui aura pour bute de me fournir le model  !

fooController
Public function saladeAction(){

return viewModel();
}

barContorller
Public function mangerAction(){
  $saladeModel = $this->forward()->dispatch('fooController');

//traitement
saladeModel->setParameters([
   //etc, etc...
])
return $saladeModel;

}

Magnifique !
Je vois même pas mal de perspective a ce système smile


EDIT : poster en même temps que flobrflo. Sisi il ont bien les même paramêtre, javais jsute pas pensé a passé par un tableau.
Mon probleme était surtout que je devais repassé a plusieurs endroit en cas de nouvelle variable.

Dernière modification par Splyf (18-03-2016 11:03:08)

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