Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-03-2012 21:53:44

BBFUNK01
Nouveau membre
Date d'inscription: 21-03-2012
Messages: 3

Appli modulaire et "page not found" systématique hormis sur index.php

Hello tout le monde,

Je commence tout juste à découvrir Zend Framework, je suis en train donc de mettre en place une application avec modules et ce en testant directement en ligne (j'ai un serveur mutualisé chez MavenHosting).

J'ai donc opté pour une arborescence comme ceci :

• public_html6

— index.php
— css
— js
— .htaccess

• Application

— Bootstrap.php

— configs/application.ini

— forms

— layouts/layout.phtml

— models

— modules
— — accueil
— — — controllers
— — — — ErrorController.php
— — — — IndexController.php
— — — models
— — — views
— — — — helpers
— — — — scripts
— — — — — error/error.phtml
— — — — — index/index.phtml
— — admin (même arbo que "accueil")

— plugins

— views

Pour ce faire j'ai donc suivi ce tutoriel-ci : tutoriel

Bref, je suis parvenu à installer la "bête", mais comme vous vous en doutez je rencontre un problème :
Je ne parviens à accéder qu'à ma page d'accueil, si je pointe sur un autre module j'obtiens "page not found".
Je rame car je n'arrive pas à trouver l'origine du problème :
- l'url rewriting est bien activé sur mon serveur.
- mon fichier application.ini me semble correct
- mon .htaccess me semble correct également

En somme soit il y a une grosse bourde qui se balade quelque part dans mon appli et que je n'ai pas encore relevée, soit j'ai manqué un épisode et tout n'est pas encore clair pour moi.

Voici quoi qu'il en soit mes fichiers de configuration :

le .htaccess :

suPHP_ConfigPath /home/<id>/public_html6/php.ini

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

AddHandler server-parsed .phtml


le application.ini :

[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"

; so auto-loading will find our classes in library/App
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

; initialize front controller resource
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = "accueil"
resources.modules[] = "admin"

resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "index"
resources.frontController.defaultModule = "accueil"
resources.frontController.useDefaultControllerAlways = true
resources.frontController.params.displayExceptions = 0

resources.frontController.baseUrl = "/home/<id>/public_html6"

; initialize layout resource
resources.layout.layoutPath = APPLICATION_PATH "/layouts"

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1


le php.ini (situé à la racine du site) :

register_globals = Off
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
safe_mode = Off
extension=pdo.so
extension=pdo_mysql.so


Le Bootstrap.php :

<?php

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)
        $loader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Default',
            'basePath'  => APPLICATION_PATH));

        return $loader;
    }

    protected function _initSession()
    {
        // On initialise la session
        $session = new Zend_Session_Namespace('toto', true);
        return $session;
    }

    protected function _initView()
    {
        // Initialisation de la vue et des helpers de vue
        $view = new Zend_View();
        $view->doctype('HTML5');
        // 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;
    }
   
}


le fichier index.php :


<?php
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend_fwk/appli'));

// 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'),
    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();


Mon module "admin" a la même arbo que mon module "accueil" :

le IndexController.php :

<?php

class IndexController extends Zend_Controller_Action
{
    public function indexAction(){

    }
}

la vue en rapport :

<div>
    <h1>ACCUEIL</h1>
</div>


Bref je ne trouve pas où ça cloche, sur mon serveur chez MaveHosting j'ai plusieurs sites qui tournent et sont rangés dans des dossiers comme ceci : "public_html", "public_html2", "public_html3"...etc. Je ne pense pas que ça puisse être la cause du problème mais bon sait-on jamais...

Si quelqu'un parmi a un tuyau je suis preneur car je sèche...

Merci wink

BBFUNK01

Hors ligne

 

#2 23-03-2012 12:52:35

BBFUNK01
Nouveau membre
Date d'inscription: 21-03-2012
Messages: 3

Re: Appli modulaire et "page not found" systématique hormis sur index.php

Hello,

après vérification auprès de mon hébergeur, l'AllowOverride est bien à All. Je ne sais donc plus trop où chercher la petite bête pour résoudre ce problème.
Personne ne voit quelque chose d'anormal dans ma config ?

Merci ;-),

BBFUNK01

Hors ligne

 

#3 24-03-2012 13:36:04

yelmontaser
Nouveau membre
Date d'inscription: 26-06-2009
Messages: 8
Site web

Re: Appli modulaire et "page not found" systématique hormis sur index.php

Par défault Zend chercher le layout dans layouts/scripts/layout.phtml

Hors ligne

 

#4 24-03-2012 17:40:24

BBFUNK01
Nouveau membre
Date d'inscription: 21-03-2012
Messages: 3

Re: Appli modulaire et "page not found" systématique hormis sur index.php

Hello yelmontaser, merci pour ta réponse. Du coup je suis parvenu à "déverrouiller" le problème en reprenant toute mon arborescence de A à Z et du coup j'arrive à accéder à mes modules, mais maintenant je me heurte à un nouveau 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.

J'ai retouché mon arborescence comme suit :

/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:

<?php

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)
        $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:

<?php

class Membres_Bootstrap extends Zend_Application_Module_Bootstrap 
{
    
}

Mon fichier application.ini :

Code:

[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:

<?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:

<?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 ?

J'avoue que je ne pige pas encore tout de l'utilisation de Zend, mes débuts sont laborieux mais j'ai hâte de maîtriser un peu mieux la bête car ça a l'air quand même puissant smile.

Merci ;-),

BBFUNK01

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages