IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

appli modulaire et problème d'accès actions


Sujet :

MVC PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut appli modulaire et problème d'accès actions
    Hello,

    Je débute sur Zend et je suis en train de développer une application modulaire, mais tout ne fonctionne pas comme cela le devrait et je ne parviens pas à trouver pourquoi.
    Le problème : je peux naviguer dans mon module "Default" avec les différents controllers de ce module, mais je ne peux accéder qu'à l'index des autres modules, je n'arrive pas à accéder à pointer sur d'autres actions.

    Voici mon arborescence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    /application/
     
    — /Bootstrap.php
     
    —/cache/
     
    —/configs/application.ini
     
    —/layouts/layout.phtml
     
    —/modules/
     
    ——/default/
    ———/Bootstrap.php
    ———/configs/
    ———/controllers/
    ————/IndexController.php
    ————/ErrorController.php
    ————/TestController.php
    ———/forms/
    ———/models/
    ———/plugins/
    ———/views/
    ————/filters/
    ————/helpers/
    ————/scripts/
    —————/error/error.phtml
    —————/index/index.phtml
    —————/test/index.phtml
     
    ——/membres/
    ———/Bootstrap.php
    ———/configs/
    ———/controllers/
    ————/IndexController.php
    ————/ErrorController.php
    ————/InscriptionController.php
    ———/forms/
    ———/models/
    ———/plugins/
    ———/views/
    ————/filters/
    ————/helpers/
    ————/scripts/
    —————/error/error.phtml
    —————/index/index.phtml
    —————/inscription/index.phtml
    Je peux accéder à l'action "test" dans mon module "default", mais ce qui est bizarre c'est qu'il a fallu que je change le nom du fichier de vue en "index.phtml" au lieu de "test.phtml" pour que ça marche... Je ne sais pas encore pourquoi ça ne marche pas en laissant "test.phtml".
    Par contre dans le module "membres" il m'est impossible d'accéder à l'action "inscription", que je nomme la vue "index.phtml" ou "inscription.phtml". Etrange non ?

    J'ai mon Bootstrap.php à la racine de l'application qui contient ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
     
    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)
            $loader = new Zend_Application_Module_Autoloader(array(
                'namespace' => '',
                'basePath'  => APPLICATION_PATH));
     
            return $loader;
        }
     
        protected function _initSession()
        {
            // On initialise la session
            $session = new Zend_Session_Namespace('test', true);
            return $session;
        }
     
        protected function _initView()
        {
            // Initialisation de la vue et des helpers de vue
            $view = new Zend_View();
            $view->doctype('HTML5');
            $view->headTitle('TEST')
                 ->setSeparator(' : ');
            $view->headLink()->prependStylesheet('/css/global.css');
            $view->headScript()->prependFile('/js/jquery-1.6.1.min.js');
            // On ajoute le dossier des helpers
            $view->addHelperPath(APPLICATION_PATH . '/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;
        }
    }
    Les Bootstrap.php des autres modules ne contiennent que ce code pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
     
    class Membres_Bootstrap extends Zend_Application_Module_Bootstrap 
    {
     
    }
    Mon fichier application.ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    [production]
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    phpSettings.date.timezone = "Europe/Paris"
    includePaths.library = APPLICATION_PATH "/../library"
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
     
    appnamespace = "Application"
     
    autoloaderNamespaces[] = "Zend_"
     
    ; initialize database
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "user"
    resources.db.params.password = "****"
    resources.db.params.dbname = "database"
    resources.db.params.date_format = "YYYY-MM-ddTHH:mm:ss"
    resources.db.isDefaultTableAdapter = true
     
    resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
    resources.modules = ""
    resources.frontController.useDefaultControllerAlways = true
     
    resources.layout.layout = "layout"
    resources.layout.layoutpath = APPLICATION_PATH "/layouts"
     
    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    resources.frontController.params.displayExceptions = 1
    Mon fichier "index.php" à la racine du site :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    // Define path to application directory
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zf'));
     
    // Define application environment
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
     
    // Ensure library/ is on include_path
    set_include_path(implode(PATH_SEPARATOR, array(
        realpath(APPLICATION_PATH . '/../library'),
        APPLICATION_PATH . '/modules/admin/models',
        APPLICATION_PATH . '/modules/petitesannonces/models',
        APPLICATION_PATH . '/modules/blogs/models',
        APPLICATION_PATH . '/modules/membres/models',
        get_include_path(),
    )));
     
    /** Zend_Application */
    require_once 'Zend/Application.php';
    require_once 'Zend/Session.php';
    Zend_Session::start();
     
    // Create application, bootstrap, and run
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
    $application->bootstrap()
                ->run();
    Et enfin voici par exemple mon fichier "InscriptionController.php", du module "membres" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
     
    class Membres_InscriptionController extends Zend_Controller_Action {
     
        public function inscriptionAction(){
            $this->view->show = 'Inscription';
        }
     
    }
    Je ne comprends pas pourquoi je ne peux pas accéder à d'autres actions que celle par défaut (index) des modules autres que "Default", je ne comprends pas non plus pourquoi je dois nommer ma vue "index.phtml" dans le dossier "test" des vues du module "Default".
    D'ailleurs je ne sais pas si je dois changer mon fusil d'épaule concernant la gestion de mes Bootstrap.php : dois-je laisser le code existant du Boostrap.php situé à la racine ou dois-je le laisser vierge et mettre plutôt du code dans les Bootstrap.php de mes modules ?

    Si vous avez une idée d'où vient le problème ou avez une autre méthode je suis preneur, par ailleurs je teste sur mon hébergement : hébergement mutualisé chez MavenHosting.

    Merci ,

    BBFUNK01

  2. #2
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Bonjour,
    À première vue, tu ne déclare pas tes modules dans ton Bootstrap principal.
    Essaye de les ajouter.

    Reviens vers nous si tu as des soucis

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut
    Hello 5h4rk, et merci pour ta réponse rapide ,

    J'ai donc essayé de déclaré le chargement de mes modules de cette manière dans mon Bootstrap.php principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    protected function _initAutoload()
    	{
    		// On enregistre les modules (les parties de notre application), souvenez-vous : Backend et Frontend
    		$Defaultloader = new Zend_Application_Module_Autoloader(array(
    			'namespace' => 'Default_',
    			'basePath'  => APPLICATION_PATH . '/modules'));
     
    		return $Defaultloader;
     
    		$Membresloader = new Zend_Application_Module_Autoloader(array(
    			'namespace' => 'Membres_',
    			'basePath'  => APPLICATION_PATH . '/modules'));
     
    		return $Membresloader;
     
    		$Blogsloader = new Zend_Application_Module_Autoloader(array(
    			'namespace' => 'Blogs_',
    			'basePath'  => APPLICATION_PATH . '/modules'));
     
    		return $Blogsloader;
    	}
    Mais ça ne change rien : seul le module Default permet d'accéder à toutes les actions, dans les autres modules je ne peux accéder qu'à l'action "index".
    Ce que e ne pige pas surtout c'est pourquoi dans mon module "Default" je dois nommer toutes mes vues "index.phtml", et ce quelque soit le sous-dossier dans "scripts", j'ai essayé en nommant un fichier de vue "test.phtml" mais ça ne marche pas... Ca je ne pige vraiment pas, je pensais qu'au niveau du nommage les noms des vues devaient reprendre le nom du sous-dossier contenu dans "scripts".

    J'ai aussi essayé de déclarer mes modules dans mon application.ini mais ça ne marche pas. Est-ce que je ne dois pas déclarer mes routes dans les Bootstrap.php respectifs de chacun de mes modules (hormis le module "Default") ?

    Zend Framework a l'air puissant, mais pour ma part les débuts sont laborieux, je ne sais pas si ce fut le cas pour vous aussi .

    Merci ,

    BBFUNK01

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut
    voici l'erreur que cela me retourne si j'essaie d'accéder à cet url :

    www.monsite.fr/membres/inscription

    l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    An error occurred
     
    Page not found
     
    Exception information:
     
    Message: Action "index" does not exist and was not trapped in __call()
     
    Stack trace:
     
    #0 /home/<id>/zf/library/Zend/Controller/Action.php(518): Zend_Controller_Action->__call('indexAction', Array)
    #1 /home/<id>/zf/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
    #2 /home/<id>/zf/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
    #3 /home/<id>/zf/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
    #4 /home/<id>/zf/popole/Bootstrap.php(10): Zend_Application_Bootstrap_Bootstrap->run()
    #5 /home/<id>/zf/library/Zend/Application.php(366): Bootstrap->run()
    #6 /home/<id>/public_html6/index.php(31): Zend_Application->run()
    #7 {main}  
    Request Parameters:
     
    array (
      'module' => 'membres',
      'controller' => 'inscription',
      'action' => 'index',
    )
    Je ne vois pas comment régler le souci, je crois avoir déclaré ce qu'il fallait dans mon Bootstrap.php principal et dans mon application.ini mais à en juger par l'erreur retournée ce n'est pas le cas .

    BBFUNK01

  5. #5
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Tu ne declares pas correctement module.

    Ta methode s arrete au premier return

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut
    Hello 5h4rk,

    Excuse-moi pour mon manque de connaissances sur Zend mais comment dois-je procéder pour déclarer correctement mes modules ? Y a t'il une autre méthode ?

    Merci

    BBFUNK01

  7. #7
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
        	$autoloader = Zend_Loader_Autoloader::getInstance();
     
            $autoloadModule = new Zend_Application_Module_Autoloader(array(
                'namespace' => 'Default_',
                'basePath'  => dirname(__FILE__) . '/modules/default',
            	)
            );
            $autoloader->pushAutoloader($autoloadModule,'Default_');
     
    		$autoloadModule = new Zend_Application_Module_Autoloader(array(
    			'namespace' => 'Membres_',
    			'basePath'  => dirname(__FILE__) . '/modules/membres'
    			)
    		);
            $autoloader->pushAutoloader($autoloadModule,'Membres_');
     
            return $autoloader;

Discussions similaires

  1. [ZF 1.10] Appli modulaire - Problème de redirection/d'URL
    Par DarkSeiryu dans le forum MVC
    Réponses: 38
    Dernier message: 24/11/2010, 15h55
  2. Accès action impossible, problème de route?
    Par barnoufal dans le forum Ruby on Rails
    Réponses: 12
    Dernier message: 17/10/2008, 15h54
  3. Réponses: 3
    Dernier message: 18/05/2007, 16h03
  4. Réponses: 8
    Dernier message: 13/03/2007, 13h59
  5. problème d'acces concurentiel à un fichier
    Par Theoden dans le forum MFC
    Réponses: 2
    Dernier message: 04/03/2004, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo