Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
BBFUNK01
Hors ligne
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
Par défault Zend chercher le layout dans layouts/scripts/layout.phtml
Hors ligne
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 :
<?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 :
<?php class Membres_Bootstrap extends Zend_Application_Module_Bootstrap { }
Mon fichier 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" 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 :
<?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" :
<?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 .
Merci ;-),
BBFUNK01
Hors ligne
Pages: 1