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.