Nous allons utiliser comme base l’exemple du ZendSkeletonApplication qui se trouve être le getting started fournit par Zend Framework 2 sur leur site ou directement sur github.
Vous pouvez constater que vous avez un dossier module et dans lequel vous avez Application (ZendSkeletonApplication/module/Application/)
Dans le dossier src puis Application et ensuite Controller vous avez l’IndexController (ZendSkeletonApplication/module/Application/src/Application/Controller/)
Voici un exemple de mon IndexController:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
< ?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Application\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class IndexController extends AbstractActionController { public function indexAction() { $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); $gmaps = $baseDir . '/../../GMaps/'; if (file_exists(__DIR__ . '/../../../../../vendor/zendframework/zendframework/library/Zend/Loader/AutoloaderFactory.php')) { include_once __DIR__ . '/../../../../../vendor/zendframework/zendframework/library/Zend/Loader/AutoloaderFactory.php'; } \Zend\Loader\AutoloaderFactory::factory(array('Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( 'GMaps' . '\\' => $gmaps, ) ))); $test = new \GMaps\Index(); echo "<br /><br /><br />" . $test->render(); $view = new ViewModel(); $loginView = new ViewModel(); $loginView->setTemplate('pmtime/index'); $view->addChild($loginView, 'login'); return $view; } } |
La partie qui est importante est:
1 2 3 4 5 6 |
$view = new ViewModel(); $loginView = new ViewModel(); $loginView->setTemplate('pmtime/index'); $view->addChild($loginView, 'login'); return $view; |
En gros, on définit une nouvelle vue s’appelant « view » qui nous servira de base.
Ensuite nous définissions une nouvelle vue qui s’appelle $loginView.
On définit vers quel vue cette vue nous renvoie (quel template).
Dans notre cas, pmtime/index.
Mais qu’est-ce que pmtime/index? Comment le définit-on?
Très simple, dans le module.config.php se trouvant dans le dossier config de votre application (ZendSkeletonApplication/module/Application/config/)
Cherchez la partie « view_manager » (copie de la partie du mien ci-dessous):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => array( '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', 'pmtime/index' => __DIR__ . '/../../PmTime/view/pm-time/index/index.phtml', ), 'template_path_stack' => array( __DIR__ . '/../view', __DIR__ . '/../../PmTime/view', ), ), |
Pour définir, le pmtime/index vu au dessus dans notre controleur il suffit de l’ajouter dans template_map ainsi que le chemin où se trouve le layout.
Dans mon cas j’ai une vue dans un module différent qu’application et cela donne:
1 |
'pmtime/index' => __DIR__ . '/../../PmTime/view/pm-time/index/index.phtml', |
Pour finir dans le controleur on assigne la vue à un nom de variable:
1 |
$view->addChild($loginView, 'login'); |
Pour afficher ensuite cette vue c’est très simple.
Par défaut, l’application va afficher l’index.phtml de l’application (ZendSkeletonApplication/module/Application/view/application/index/)
Voici mon index.phtml ci-dessous:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<div> Here is view/application/index/index.phtml </div> <!-- Info --> <h1>pmtime</h1> < !DOCTYPE html> Bienvenue sur notre nouvel applicatif. <div class="container2"> <form action="<?php echo URL; ?>connected/" class="form-signin" method="post"> Veuillez vous connecter pour continuer <br /><br /> <input type="text" class="form-control" name="username" placeholder="Utilisateur" required autofocus/> <input type="password" name="password" class="form-control" placeholder="Mot de passe" required/> <label class="checkbox"> <input type="checkbox" name="remember" value="remember-me"/> Se souvenir de moi </label> <button class="btn btn-lg btn-primary btn-block" type="submit">Connexion</button> </form> </div> <!-- /container --> < ?php echo $this->login; ?> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> |
Pour afficher dans l’index.phtml la vue de mon autre module il me suffit de faire
1 |
<?php echo $this->login; ?> |
Puisque j’ai assigné à ma variable login la vue.
Et voila, tout devrait fonctionner, si vous avez des questions suite à ce petit bout de tuto. n’hésitez pas.
Bonjour,
Merci pour ce tuto. C’est exactement ce que je recherchais.
Je testes de suite cette méthode et je reviens vers vous si nécessaire.
Encore merci
Fantastic blog. Much thanks again. Cool