Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Autres composants
Autres composants Forum de support sur les autres composants de Zend Framework.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2011, 18h52   #1
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
Par défaut Question sur le Bootstrap et les Modules

Bonjour,

Je suis bloqué dans le développement d'un site Internet utilisant ZF 1.11, je dois faire un backoffice et un frontoffice. Dans un premier temps, j'ai fais le front, et tout fonctionne tres bien. Puis pour le backoffice, j'ai voulu utiliser les modules et c'est une autre histoire.

La documentation ZF est tres mal fichu car on ne comprend jamais si on doit travailler dans le fichier index.php (du dossier public), dans le bootstrap du dossier application ou ceux des modules ou enfin dans les controllers.

Mes problemes sont les suivants :
- Je ne peux pas recuperer les variables du bootstrap dans mon layout.phtml. Pourtant ca fonctionnait avant que j'implement les modules. Mais $this->layout()->variable renvoie toujours null
- Je ne peux pas acceder a mon action Index du controller Index dans le module Admin, j'ai ce message d'erreur.


Citation:
An error occurred
Page not found
Exception information:

Message: Invalid controller specified (index)
Stack trace:

#0 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 E:\src\cedar.local\public\index.php(26): Zend_Application->run()
#4 {main}

Request Parameters:

array (
'module' => 'admin',
'controller' => 'index',
'action' => 'index',
)
Pour faire fonctionner les modules, voici comment mon fichier application.ini

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
[production]
;Debug Output
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
 
;Include Path
includePaths.library = APPLICATION_PATH "/../library"
 
;Modules
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =
resources.frontController.params.prefixDefaultModule = "1"
resources.frontController.defaultModule = "default"
 
# Front
;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
 
# Layout
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
 
;view
resources.view.encoding = "UTF-8"
resources.view[] =
J'ai supprimé le bootstrap de mon dossier application et j'ai deux bootstrap dans mes dossiers modules :

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
<?php
// /application/modules/default/Bootstrap.php
class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{
	protected function _initAutoload()
	{
		$autoLoader = new Zend_Application_Module_Autoloader(
		array(
			'basePath' => APPLICATION_PATH,
			'namespace' => '',
			'resourceTypes' => array(
				'form' => array(
					'path' => 'forms/',
					'namespace' => 'Form_',),
				'validator' => array(
					'path' => 'validators/',
					'namespace' => 'Validate_',)	,
				'model' => array(
					'path' => 'models/',
					'namespace' => 'Model_'),
		))
		);
		// Return it so that it can be stored by the bootstrap
		return $autoLoader;
	}
 
	protected function _initMenus(){
		$view = $this->getResource('view');
 
		// Main Menu
		$menu = ($_SERVER['REQUEST_URI']=='/user/login') ?'user':'';
		if($menu=='')
		$menu = (substr($_SERVER['REQUEST_URI'], 1, 4)=='blog') ?'blog':'';
		$view->menu = $menu;
 
		// SubMenu
		$view->submenu = 'accueil';
		$config = new Zend_Config_Ini(APPLICATION_INI, APPLICATION_ENV);
		$db = Zend_Db::factory($config->get('resources')->db);
		$rubriques = new Model_Rubriques($db);
		$view->rubriques = $rubriques->getAllNameToURL();
	}
}
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
<?php
 
// /application/modules/default/Bootstrap.php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
	protected function _initAutoload()
	{		
		// Add autoloader empty namespace
		$autoLoader = Zend_Loader_Autoloader::getInstance();
		$autoLoader->registerNamespace('Application_');
 
		//
		$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
				'basePath' => APPLICATION_PATH,
				'namespace' => 'Admin_',
				'resourceTypes' => array(
					'form' => array(
						'path' => 'forms/',
						'namespace' => 'Form_',),
					'validator' => array(
						'path' => 'validators/',
						'namespace' => 'Validate_',),
					'model' => array(
						'path' => 'modules/admin/models/',
						'namespace' => 'Model_'),
		)));
 
		// Return it so that it can be stored by the bootstrap
		return $autoLoader;
	}
}
Merci d'avoir lu jusqu'ici et merci d'avance pour vos reponses.
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 20h53   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Serait il possible d'avoir un schéma de l'architecture que tu utilise, un screenshot serait pas mal.

Sinon pour commencer pour utiliser les modules, il te faut tout de même un bootstrap pour déclarer que tu utilise les modules ainsi qu'un dans chaque module.

Pour ma part le core de l'application j'utilise le module default et un autre module, ce sont les seuls modules que je spécifie dans ma config
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 22h03   #3
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
Citation:
Envoyé par 5h4rk Voir le message
Serait il possible d'avoir un schéma de l'architecture que tu utilise, un screenshot serait pas mal.

Sinon pour commencer pour utiliser les modules, il te faut tout de même un bootstrap pour déclarer que tu utilise les modules ainsi qu'un dans chaque module.

Pour ma part le core de l'application j'utilise le module default et un autre module, ce sont les seuls modules que je spécifie dans ma config
tree.PNG

Mon fichier application.ini ne suffit donc pas pour la declaration de l'utilisation de module ? Si non, peux-tu poster ton fichier application/bootstrap.php (ou plutot la fonction qui te permet d'attacher ton module au projet) ?
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 22h28   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Au niveaudes dossiers a la base de application je mets:
- config
- modules
- language
- bootstrap.php

Ensuite dans config/application.ini :
Code :
1
2
3
4
5
6
7
8
9
 
;PARTIE CONTROLEUR FRONTAL
;Configuration de la gestion des modules
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.defaultModule = "default"
resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "index"
;Lecture de tous les modules
resources.modules[] =*
Et dans le Bootstrap :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
*/**
** * * Initialisation de l'autoloader
** * */
** *protected function _initAutoload()
** *{
** * * *//Récupération d'une instance de l'autoloader
** * * *$autoloader = Zend_Loader_Autoloader::getInstance();
** * * *//Définition du namespace de l'application
** * * *$autoloader->registerNamespace('SRCE');
** * * *//Définition du module par défaut
** * * *$autoloadModule = new Zend_Application_Module_Autoloader(array(
** * * * * *'namespace' => 'Default_',
** * * * * *'basePath' *=> dirname(__FILE__) . '/modules/default',
** * * * * *)
** * * *);
** 
** * * *//Ajout du module par défaut dans l'autoloader
** * * *$autoloader->pushAutoloader($autoloadModule,'Default_');
** * * *
** * * *//Renvoi de l'autoloader
** * * *return $autoloader;
** *}
J ai enlever pas mal de chose car ma gestion des modules est une usine a gaz
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 10h53   #5
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
J'ai fais les modifications, mais ca ne change malheureusement rien. Je ne peux pas acceder a mon mondule admin pourtant le bootstrap du dossier admin est bien initié. Mais j'ai cette erreur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
An error occurred
Page not found
Exception information:
 
Message: Invalid controller specified (index)
Stack trace:
 
#0 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 E:\Servers\htdocs\public\index.php(26): Zend_Application->run()
#4 {main}  
 
Request Parameters:
 
array (
  'module' => 'admin',
  'controller' => 'index',
  'action' => 'index',
)
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h00   #6
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Mets nous la nouvelle architecture avec également ton controller qui pose problème
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h37   #7
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
Lorsque je teste le site Internet, je peux accéder au Front (mon module par defaut). Par contre si je tente d'accéder à l'url /admin/index/index, j'obtiens le message d'erreur précédent.

Ma structure est la suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
application/
    default/
        controllers/
        models/
        views/
        Bootstrap.php
    admin/
        controllers/
            IndexController.php
        models/
        views/
            scripts/
                index/index.phtml
        Bootstrap.php
    Bootstrap.php
Le controller auquel je tente d'accéder
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
class Admin_IndexController extends Zend_Controller_Action
{
 
    public function init()
    {
        /* Initialize action controller here */
    }
 
    public function indexAction()
    {
        // action body
    }
}
Par contre, je ne sais pas quoi mettre dans mon fichier application/Bootstrap.php puisque le Bootstrap dans le module admin est bien lancé.
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h14   #8
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Regarde le code que je t ai donné pour le bootstrap, tes modules doivent se trouver dans un dossier modules a la base de application
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h20   #9
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
Pardon c une erreur de ma part, les dossiers admin et default sont bien dans le dossier modules qui lui meme se trouve dans le dossier application.

Mon module default fonctionne, mais le module admin ne fonctionne pas du tout
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h37   #10
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Fais nous voir ton bootstrap.php à la base de application.

Dans le dossier admin, dans le fichier bootstrap.php tu ne dois avoir que :
Code :
1
2
3
class admin_Bootstrap extends Zend_Application_Module_Bootstrap{
 
}
dans lequel tu peux ajouter un comportement propre à ce module
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h00   #11
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
Mon bootstrap dans le module admin est comme le tiens, sauf que ma classe s'appelle Admin_Bootstrap et celui de mon dossier application est vide :

Code :
1
2
3
4
5
 
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h08   #12
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
tu devrais regarder et bien lire ce que j'ai écris dans mes précédents messages, je t'ai donné le code du bootstrap principal
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h16   #13
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
Citation:
Envoyé par 5h4rk Voir le message
Fais nous voir ton bootstrap.php à la base de application.

Dans le dossier admin, dans le fichier bootstrap.php tu ne dois avoir que :
Code :
1
2
3
class admin_Bootstrap extends Zend_Application_Module_Bootstrap{
 
}
dans lequel tu peux ajouter un comportement propre à ce module
J'ai bien essayé avec la fonction
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
protected function _initAutoload()
	 {
		   //Récupération d'une instance de l'autoloader
		   $autoloader = Zend_Loader_Autoloader::getInstance();
		   //Définition du namespace de l'application
		   $autoloader->registerNamespace('Application_');
		   //Définition du module par défaut
		   $autoloadModule = new Zend_Application_Module_Autoloader(array(
		     'namespace' => '',
		     'basePath' => dirname(__FILE__) . '/modules/default',
		     )
		   );
	}
mais ca ne me permet pas d'acceder a une autre modules que default
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h30   #14
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Il te manque des ligne pour l'ajouter à l'autoloader
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h31   #15
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
En utilisant ton code pour mon bootstrap principal :

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
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
	protected function _initAutoload()
	{
 
		//Récupération d'une instance de l'autoloader
		$autoloader = Zend_Loader_Autoloader::getInstance();
		//Définition du namespace de l'application
		$autoloader->registerNamespace('Application_');
		//Définition du module par défaut
		$autoloadModule = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Default_',
     'basePath' => dirname(__FILE__) . '/modules/default',
		)
		);
 
		//Ajout du module par défaut dans l'autoloader
		$autoloader->pushAutoloader($autoloadModule,'Default_');
 
		//Renvoi de l'autoloader
		return $autoloader;
	}
J'obtiens un message d'erreur

Code :
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php:248 Stack trace: #0 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch() #2 E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #3 E:\Servers\htdocs\public\index.php(23): Zend_Application->run() #4 {main} thrown in E:\Servers\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php on line 248
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 15h49   #16
Invité régulier
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 6
Points : 6
J'ai fini par supprimer le dossier admin dans module et je me suis servi du zf tool pour creer un module

et je peux acceder a mon controller !

Merci 5h4rk pour ton aide
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 16h45   #17
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Pas de quoi, par contre je te conseil de voir les différences avec ce que je t'avais donné
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h26.


 
 
 
 
Partenaires

Hébergement Web