Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello,
http://blog.anonymation.com/
Nous ouvrons officiellement le blog anonymation qui traitera de plusieurs sujets, tous liés au développement et plus spécifiquement au web : graphisme, communication, développement web, architecture web, méthodes agiles etc... et bien sûr quelques idées et implémentations autour du Zend Framework.
J'espère que nous arriverons à vous faire partager notre passion pour les sujets abordés.
Concernant Zend Framework, je commence avec deux sujets :
- plutôt classique, une resaucée sur la structure d'un projet
- et une implémentation du concept d'injection de dépendances avec Zend_Application.
A+ benjamin.
Hors ligne
Salut,
Juste pour signaler un changement de plan, nous avons séparés les sujets sur deux blogs.
Un qui traitera du webdesign et de la communication, la même url : http://blog.anonymation.com/
Un autre consacré au développement et architecture web : http://code.anonymation.com/
Ce sera plus clair et plus adapté, les publics pouvant être vraiment très différents.
Maintenant il ne me reste plus qu'à m'y mettre et à pousser pour sortir quelques articles.
A+ benjamin.
Hors ligne
Hello,
Un petit billet sur les aides d'actions :
Les aides d’action (helpers), factorisation, avoir le réflexe
A+ !
Hors ligne
Salut,
Nouvel article ZF : Aide de vue Mkurl : simplifier l’assemblage des urls
A+
Hors ligne
Hello,
Deux nouveaux articles concernant les moteurs de templates.
Utiliser un moteur de template avec PHP, pourquoi ?
Utiliser Twig avec Zend Framework 1.1x
A+
Dernière modification par Delprog (23-11-2010 12:58:25)
Hors ligne
Hello,
Je me suis moi aussi penché sur Twig la semaine dernière. J'ai un soucis que je n'ai pu résoudre "proprement". Je travaille sur un très gros projet (tourne depuis quelque années 10 modules + 50 contrôleurs + 250 views). Je souhaiterais intégrer Twig pour les améliorations à venir. Le ViewRenderer est actif. Par quelle manière pourrait-on "proprement" choisir le moteur de rendu au moment du rendu de l'action tout en maintenant le ViewRenderer paramétré par une ressource d'application ?
@+
Hors ligne
Salut,
Tu veux conserver PHP pour le rendu de certaines vues et activer ponctuellement le moteur twig ?
Si c'est bien ça, tu dois pouvoir le faire sans trop de difficultés.
Dans l'intégration que j'ai fait, la ressource se nomme twig et non pas view, tu peux donc toujours déclarer et configurer la ressource view dans application.ini en plus de twig.
Mais seulement la 2ème ressource (dans l'ordre du fichier ini) sera filée au viewrenderer, on peut donc considérer que ce sera le moteur par défaut.
Dans le conteneur tu pourras récupérer indifféremment chaque ressource :
$twigView = $bootstrap->getResource('twig'); //ou $zfView = $bootstrap->getResource('view');
Avec ça tu peux refiler l'objet de vue qui t'interesse au viewrenderer dans ton contrôleur (pour avoir le bootstrap, $bootstrap = $this->getInvokArg('bootstrap')), à la demande, ou pourquoi pas via une aide d'action.
Tu dis que ça fait quelques années que le projet tourne, je suppose que tu n'as peut-être pas Zend_Application, dans ce cas il faut bien que tu isoles les deux objets de vue dans le registre et tu pourras les récupérer dans tes contrôleurs de la même manière.
C'est que de la théorie hein, à tester bien sur. Après si c'est propre ? je te laisse juger :p
A+ benjamin.
Dernière modification par Delprog (23-11-2010 13:31:47)
Hors ligne
Réponse parfaite. Merci
Hors ligne
Petite précision, quand je parle d'utiliser éventuellement une aide d'action, ce serait du genre :
public function monAction() { $this->_helper->viewEngine('twig'); }
Le helper ferait ce que j'explique plus haut, c'est à dire récupérer la ressource dans le conteneur et la filer au viewRenderer.
J'aurais même tendance à créer une aide d'action qui étend l'aide viewRenderer juste pour ajouter la méthode qui fait ça.
$this->_helper->viewRenderer->setEngine('twig');
A+
Hors ligne
Bon ben c'est pas aussi simple que ça d'intégrer un switch des moteurs de rendu.
Quand j'ai des preDispatch (par ex) qui affecte des variables à la vue par défaut et que je change le moteur de rendu dans l'action du contrôleur, c'est malheureusement trop tard. Le moteur n'a pas toutes les variables. Il faut donc que je remonte le choix plus tôt dans la boucle de distribution.
Je vais me pencher sur symfony2 pour voir comment ils gèrent ça.
Hors ligne
Je vais te lancer une idée comme ça, mais tu cries pas d'accord
Tu vois comment fonctionne l'aide d'action contextSwitch ? Tu peux déclarer une propriété public $contexts qui est un tableau assignant des contextes à chaque action.
Pourquoi ne pas utiliser le même principe pour les rendus ?
public $renderContexts = array( 'mon-action' => 'twig' );
Et tu enregistres ton aide d'action dans le bootstrap.
Dans ce cas, vu que tu connais déjà la route et donc l'action qui va être invoquée, tu peux déjà paramétrer ton viewRenderer à l'avance depuis ton aide d'action.
J'ai déjà utilisé ce type d'action pour certains trucs, comme déterminer les verbes http acceptés par les actions par exemple (je le donne en exemple ici : http://code.anonymation.com/zend-framew … e-reflexe/).
Ça me semble jouable.
Dans symfony 2 il n'y a pas de hook du type preDispatch ou postDispatch, le moteur de rendu est déterminé tout simplement en fonction de l'extension de la vue à rendre vu que le rendu est explicite. J'ai déjà fouillé un peu les sources de SF2 :p
A+ benjamin.
Dernière modification par Delprog (23-11-2010 18:23:52)
Hors ligne
A noter que le problème ne se posera pas avec ZF2, car la refonte de Zend\View a découplé le composant en (entre autres) un container de variable et un moteur de rendu (PhpRenderer) => http://git.zendframework.com/?a=tree&am … /Zend/View
Concernant les contextes+aide d'action, j'étais sur cette voie mais par des annotations/reflection + aide d'action ce qui serait moins performant que ta solution mais plus élégant (à mon sens ).
Hors ligne
Rhaaa les annotations, j'ai peur, je sens qu'on va pas y couper dans quelques temps !
Sinon, oui, ça serait plus élégant
Merci pour le lien sur Zend View 2 et merci d'en avoir parlé dans le webinar
J'étais déjà en train de partir dans un délire pour gérer ça. Remarque ça n'empêche pas.
Je pensais désolidariser la gestion du rendu de la vue et étendre Zend View pour accepter plusieurs moteurs. Ça ne demanderait finalement pas grand chose.
Une interface du genre :
interface Ano_View_Engine_Interface { public function render($template); } class Ano_View_Engine_Twig implements Ano_View_Engine_Interface { public function __construct(array $options = array()) {} public function render($template) { // $this->getEnvironment()->...... } }
Et ajouter des méthodes à Zend_View :
public function addEngine($key, Ano_View_Engine_Interface $engine) {} public function hasEngine($key) {} public function run() { // $engine = déterminer le moteur en fonction de l'extension par ex. $this->getEngine($engine)->render($template); }
Dans la config ça pourrait donner un truc du genre:
resources.view.engine.twig.class = "Ano_View_Engine_Twig" resources.view.engine.twig.options.charset = "utf-8" resources.view.engine.twig.options.strict_variables = 0 resources.view.engine.twig.options.cache = APPLICATION_PATH "/../var/cache/twig" resources.view.engine.twig.options.auto_reload = 1 resources.view.engine.twig.options.debug = 0 resources.view.engine.twig.options.trim_blocks = 1 resources.view.engine.twig.viewPaths[] = APPLICATION_PATH "/views/scripts" resources.view.helperPath.My_View_Helper_ = "My/View/Helper"
Du coup Twig n'aurait plus besoin d'être un objet view.
Je sais pas si ça vaut le coup mais je vais peut-être apporter des modifications dans ce sens là, je réfléchis
A+ benjamin.
Dernière modification par Delprog (23-11-2010 21:26:48)
Hors ligne
Hello.
Quelques améliorations sur l'intégration de Twig avec ZF 1.x. Il est maintenant possible d'utiliser plusieurs moteurs de rendu, et ça ne devrait pas être un problème d'en ajouter de nouveaux (autres que Twig ou Phtml).
Merci à mikaelkael pour ses retours et sa contribution
L'article à ce sujet : Amélioration de l’intégration ZF et Twig
Le repo à jour : http://github.com/benjamindulau/Ano_ZFTwig
A+ benjamin.
Hors ligne
Hello.
Quelques retours sur Magento : Magento, alors, c’est comment ?
A+ benjamin.
Hors ligne