Ca marche chez toi le coup des layouts dans :
?
Chez moi pas du tout ...
Version imprimable
Ca marche chez toi le coup des layouts dans :
?
Chez moi pas du tout ...
Je vais regarder, je m'y suis pas remis depuis, je gère plusieurs projets en même temps.
J'ai trouvé pour le chargement des classes "ancienne méthode", pour les layout, faut peut être faire pareil.
J'avais réussi avec la nouvelle méthode, sans les modules, donc pour l'instant c'est pas clair.
Dès que j'ai trouvé, je posterais ici.
Ca t'a aidé mon dernier post ? tu as pu régler le souci ?
C'est ok, j'ai trouve.
La bonne synthaxe est :
resources.layout.layoutPath.<nom_module> = ...
Par exemple pour mon application.ini :
EDIT :Code:
1
2
3
4
5 ; Layout resources.layout.layout = "layout" resources.layout.layoutPath.default = APPLICATION_PATH "/modules/default/layouts/scripts" resources.layout.layoutPath.admin = APPLICATION_PATH "/modules/admin/layouts/scripts"
Arf, non il prend la derniere entree comme layout dans les 2 contextes ...
EDIT :
Je regarde petit a petit, j'ai aps bien etudie ton denrier post, je regarde en ce moment
En fait, au niveau du bootstrap, c'est quand je met des bootstrap dans les modules que ca devient n'importe quoi au niveau des erreurs.
Lorsque je laisse le "principal" (dans application), tout fonctionne (mis a part qu'il trouve pas mes classes modele dans mes dossiers de modules). Il doit me manquer quelque chose ...
Ouais, merci du retour. Je vais m'y remettre la semaine prochaine, je te tiens au courant au gré de mes trouvailles.
J'ai pas le temps ce WE, mais j'y reviens très vite.
Salut,
J'ai pas de souci en laissant les Boostrap vides dans les modules. Tout va bien, je peux me consacrer à mes layout tranquillement pour bien comprendre comment ça marche.
Salut,
Tu peux poster tes bootstrap (le principal et ceux des modules) et ton application.ini stp ?
Merci d'avance ;)
Voili voilou (en commentaire dans le boostrap, tu as du code qui a été remplacé directement dans le fichier .INI, le rendant de fait inutile dans le Boostrap. Après c'est un choix de le placer dans l'un ou dans l'autre) :
Boostrap principal :
Boostrap Default_ :Code:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 <?php /** * Application bootstrap * * @uses Zend_Application_Bootstrap_Bootstrap * @package QuickStart */ //var_dump($this->getOptions()); class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function run() { // Cela permet d'avoir la configuration disponible de partout dans notre application Zend_Registry::set('config', new Zend_Config($this->getOptions())); parent::run(); } /*protected function _initAutoload() { // On enregistre les modules (les parties de notre application), souvenez-vous : Backend et Frontend $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); return $moduleLoader; }*/ protected function _initAutoload() { // On enregistre les modules (les parties de notre application), souvenez-vous : Backend et Frontend $autoloader = new Zend_Application_Module_Autoloader( array( 'namespace' => 'Default_', 'basePath' => APPLICATION_PATH . '/modules/default'), array( 'namespace' => 'Admin_', 'basePath' => APPLICATION_PATH . '/modules/admin') ); $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('ZC_'); return $autoloader; } /*protected function _initControllerPlugins() { $frontController = Zend_Controller_Front::getInstance(); $frontController->registerPlugin(new ZC_Controller_Plugin_AssetGrabber()); } Déjà paramétré dans le .INI */ protected function _initSession() { // On initialise la session $session = new Zend_Session_Namespace('cms', true); return $session; } protected function _initView() { // Initialisation de la vue et des helpers de vue $view = new Zend_View(); $view->doctype('XHTML1_STRICT'); $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8'); // On ajoute le dossier des helpers $view->addHelperPath(APPLICATION_PATH . '/modules/default/views/helpers'); $view->addHelperPath(APPLICATION_PATH . '/modules/admin/views/helpers'); // On charge l'helper qui va se charger de la vue $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); $viewRenderer->setView($view); return $view; } }
Boostrap Admin :Code:
1
2
3
4
5
6
7
8
9
10
11 <?php /** * Application bootstrap du répertoire par défault * * @uses Zend_Application_Module_Bootstrap * @package QuickStart */ class Default_Bootstrap extends Zend_Application_Module_Bootstrap { }
Mon arborescence n'a pas changé depuis mon premier post.Code:
1
2
3
4
5
6
7
8
9
10
11 <?php /** * Application bootstrap du répertoire par défault * * @uses Zend_Application_Module_Bootstrap * @package QuickStart */ class Admin_Bootstrap extends Zend_Application_Module_Bootstrap { }
Autres choses qui peuvent avoir leur importance :
Pour accéder à l'application via -http://tonprojet/ et pas via -http://localhost/tonprojet/public/
Dans le httpd.conf de Apache, ajouter un virtual host :
Enfin, pour ceux qui sont sous Windows, remplacer la ligne suivante comme indiqué dans le fichier c:\Windows\System32\drivers\etc\hostsCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #VIRTUAL HOST A MODIFIER POUR LE PROJET CMS <VirtualHost 127.0.0.1:80> ServerName tonprojet DocumentRoot c:/wamp/www/tonprojet/public <Directory "c:/wamp/www/tonprojet/public"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
Remplacer 127.0.0.1 localhost par 127.0.0.1 tonprojet
Pour simuler un multidomaine, ajouter autant de lignes que nécessaire :
127.0.0.1 tonprojet2
127.0.0.1 tonprojet3
[...] Etc
J'espère que tout est clair, parce qu'il m'a fallut un certain temps pour comprendre et rassembler ces informations. Maintenant tout fonctionne, je peux avancer sur mon projet.
Allez, encore un petit truc, j'ai rajouté une arborescence dans library, on a donc :
library\ZC\Controller\Plugin\AssetGrabber.php
library\Zend\
C'est à cela que fait allusion le code commenté dans le boostrap et le code ZC_ dans le .INI
J'ai pas encore bien compris à quoi sert ce fichier AssetGrabber.php, mais il semble important pour la suite, les authentifications...:?
Voici donc le code du plugin :
Bon dev', et je reviendrais prochainement....Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?php /** * Description of AssetGrabber * * @author jon */ class ZC_Controller_Plugin_AssetGrabber extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup (Zend_Controller_Request_Abstract $request) { if ($request->getControllerName() != 'assets') return; $session = new Zend_Session_Namespace('auth'); if(! $session->authenticated) throw new Exception('Not authenticated!'); echo file_get_contents(APPLICATION_PATH . '/../assets/' . $request->getActionName()); exit; } }
Poser d'autres questions :mouarf:
Ah oui, autre chose.
Avec cette méthode, lorsque j'appelle les class (models) du dossier par défaut, je laisse bien le préfix Default_ ce qui diffère de la méthode fournie par Julien Pauli dans sont tuto que je n'ai pas réussi à faire fonctionner correctement (voir un de mes posts plus ancien).
+A+
Je voudrais savoir comment trouver les options pour les ressources dans le fichier.ini, du style resources.{plugin}.{option}
Code:
1
2
3// ex : Pour le layout resources.layout.layout.
Pour la ressource FrontController c'est évident les options sont visible dans Zend_Applicatin_Resource_Frontcontroller,
mais quand je lis la classe Zend_Application_Resource_Layout, les options n'y figure pas et j'ai relu la documentation, mais j'ai pas trouvé.Code:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 . . . . foreach ($this->getOptions() as $key => $value) { switch (strtolower($key)) { case 'controllerdirectory': if (is_string($value)) { $front->setControllerDirectory($value); } elseif (is_array($value)) { foreach ($value as $module => $directory) { $front->addControllerDirectory($directory, $module); } } break; case 'modulecontrollerdirectoryname': $front->setModuleControllerDirectoryName($value); break; case 'moduledirectory': $front->addModuleDirectory($value); break; case 'defaultcontrollername': $front->setDefaultControllerName($value); break; case 'defaultaction': $front->setDefaultAction($value); break; case 'defaultmodule': $front->setDefaultModule($value); break; case 'baseurl': if (!empty($value)) { $front->setBaseUrl($value); } break; case 'params': $front->setParams($value); break; case 'plugins': foreach ((array) $value as $pluginClass) { $plugin = new $pluginClass(); $front->registerPlugin($plugin); } break; case 'throwexceptions': $front->throwExceptions((bool) $value); break; case 'actionhelperpaths': if (is_array($value)) { foreach ($value as $helperPrefix => $helperPath) { Zend_Controller_Action_HelperBroker::addPath($helperPath, $helperPrefix); } } break; default: $front->setParam($key, $value); break; } } . . .
Merci de m'éclairer sur ce point.
Bonsoir,
Je remonte ce vieux sujet pour avoir vos avis concernant un point précis du passage d'un projet avec bootstrap "classique" à un projet basé sur Zend_Application.
J'utilisais précédemment des plugins ajoutés au frontController qui nécessitaient leurs propres paramètres d'initialisation. Hors, lorsque l'on utilise Zend_Application et que l'on tente d'ajouter des plugins au frontController via le fichier application.ini et le mécanisme de ressources, le plugin est forcément instancié sans argument et il est impossible de passer le moindre argument avec ce fichier .ini.
À votre avis, serait-il préférable de créer une nouvelle ressource pour ce genre de plugins sachant qu'elle ferait probablement double emploi avec la ressource frontController, ou de changer la façon dont sont récupérés les paramètres (bien qu'il serait tout de même plus commode de les définir via le fichier .ini) ?
Si vous voyez d'autres solutions possibles, n'hésitez pas ;) merci.