2012-07-19 1 views
1

J'ai essayé d'écrire un système d'authentification de base dans le cadre d'un projet que je suis censé utiliser pour en savoir plus sur Zend Framework. J'ai utilisé les outils CLI Zend pour aider à créer mon application. J'ai un module appelé Admin, dans lequel j'ai un contrôleur appelé Auth. Cependant, lorsque je tente de naviguer au contrôleur dans un navigateur je reçois l'erreur suivante:Contrôleur invalide spécifié (auth)

An error occurred 

Page not found 

Exception information: 

Message: Invalid controller specified (auth) 

Stack trace: 

#0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#1 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#2 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#3 /home/www-data/zend.danielgroves.net/htdocs/public/index.php(26): Zend_Application->run() 
#4 {main} 
Request Parameters: 

array (
    'module' => 'admin', 
    'controller' => 'auth', 
    'action' => 'index', 
) 

Vous pouvez voir par vous-même en se dirigeant vers zend.danielgroves.net

En ce que je peux dites tout est nommé correctement, jetez un oeil à la capture d'écran ci-dessous pour voir comment tout a été structuré par les outils CLI. C'est le guide que je suivais pour essayer de construire ce système de connexion http://akrabat.com/zend-auth-tutorial/. Je venais d'atteindre la partie avec la capture d'écran de l'écran de connexion (première image).

Zend Directory/File structure

Toute aide serait grandement apprécié.

EDIT 1

Mon application.ini afficher la modification suggérée par @ByteNudger:

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 

resources.db.adapter = "Pdo_Mysql" 
resources.db.params.charset = "utf8" 
resources.db.params.host = "localhost" 
resources.db.params.username = "" 
resources.db.params.password = "" 
resources.db.params.dbname = "" 

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

resources.modules[] = "" (section [bootstrap]) 

[staging : production] 

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

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

L'erreur PHP généré par le changement application.ini:

PHP Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'syntax error, unexpected '(' in /home/www-data/zend.danielgroves.net/htdocs/application/configs/application.ini on line 20' in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php:182 
Stack trace: 
#0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php(202): Zend_Config_Ini->_parseIniFile('/home/www-data/...') 
#1 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php(126): Zend_Config_Ini->_loadIniFile('/home/www-data/...') 
#2 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(386): Zend_Config_Ini->__construct('/home/www-data/...', 'development') 
#3 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(85): Zend_Application->_loadConfig('/home/www-data/...') 
#4 /home/www-data/zend.danielgroves.net/htdocs/public/index.php(24): Zend_Application->__construct('development', '/home/www-data/...') 
#5 {main} 
    thrown in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php on line 182 

EDIT 2:

Ok, je viens d'essayer ce qui a été suggéré dans la réponse de Ross Smith II ci-dessous. Mon application.ini lit maintenant:

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/admin/controllers" 

resources.frontController.params.displayExceptions = 0 

resources.db.adapter = "Pdo_Mysql" 
resources.db.params.charset = "utf8" 
resources.db.params.host = "localhost" 
resources.db.params.username = "" 
resources.db.params.password = "" 
resources.db.params.dbname = "" 

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.frontController.defaultModule = "admin" 
resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts/" 
resources.modules[] = 

[staging : production] 

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

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

Et j'obtiens cette erreur dans le navigateur:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Dispatcher/Standard.php:248 Stack trace: #0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #2 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #3 /home/www-data/zend.danielgroves.net/htdocs/public/index.php(26): Zend_Application->run() #4 {main} Next exception 'Zend_Controller_Exception' with message 'Invalid controller specified (error)#0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(O in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Plugin/Broker.php on line 336 

Voyez vous-même: http://zend.danielgroves.net/admin/auth/

Modifier 3

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/admin/controllers" 

resources.frontController.params.displayExceptions = 0 

resources.db.adapter = "Pdo_Mysql" 
resources.db.params.charset = "utf8" 
resources.db.params.host = "localhost" 
resources.db.params.username = "" 
resources.db.params.password = "" 
resources.db.params.dbname = "" 

resources.modules[] = "" 

[staging : production] 

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

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 
+0

Avez-vous activé les ressources de module dans votre 'application.ini' avec la ligne' resources.modules [] = "" '(' section [bootstrap] ')? – ByteNudger

+0

@ByteNudger Voir mon édition dans le message ci-dessus, malheureusement, il n'a pas résolu le problème. –

+0

Désolé '(section [bootstrap])' ne devrait pas être dans le 'application.ini'. Il ne restait plus qu'à commenter. Veuillez supprimer ceci et essayez à nouveau. – ByteNudger

Répondre

0

C'était quelque chose que je l'ai fait il y a quelques mois

Vous pouvez voir tout le code à https://github.com/harikt/blog

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.modules[] = "" 
autoloadernamespaces[] = "BinaryKitten" 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" 
resources.view[] = 

[staging : production] 

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

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

Dans Bootstrap.php

<?php 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    public function _initControllerPlugins() 
    { 
     $plugin = Zend_Controller_Front::getInstance()->registerPlugin(
      new BinaryKitten_ModuleConfig() 
     ); 
    } 

    public function _initAutoload() 
    { 
     $moduleLoader = new Zend_Application_Module_Autoloader(
      array(
       'namespace' => '', 
       'basePath' => APPLICATION_PATH . "/modules/default" 
      ) 
     ); 
     return $moduleLoader; 
    } 
} 

Espoir qui aide à résoudre votre problème.

0

Obtenir des modules pour fonctionner correctement dans Zend peut b e très difficile. Nous avons rencontré de nombreux problèmes inattendus, tels que l'initialisation de plusieurs connexions de base de données (une par module).

D'abord, je voudrais changer votre application.ini inclure les éléments suivants:

resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/Admin/controllers" 
resources.frontController.defaultModule = "Admin" 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

resources.layout.layoutPath = APPLICATION_PATH "/modules/Admin/layouts/scripts/" 

resources.modules[] = 

Si cela ne fonctionne pas, essayez de changer Admin à admin comme nous l'avons jamais utilisé les noms de modules capitalisés.

Si vous êtes toujours bloqué, veuillez poster votre fichier application.ini.

+0

Merci pour votre réponse. Malheureusement, je ne semble toujours pas aller nulle part, mais j'ai ajouté mon fichier application.ini ci-dessus. –

+0

Je devrais également noter ici, que j'ai essayé de renommer le dossier 'Admin' à' admin', et ai changé chaque instance dans le fichier 'application.ini' respectivement. –

0

Tout ce que j'ajoute pour faire fonctionner des modules dans des applications avec ZF 1.11, c'est ces trois lignes dans mon application.ini.

resources.frontController.moduleControllerDirectoryName = "controllers" 
resources.modules = "" 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

aussi pour faire du travail autoloadiong faire correctement que vous ne pas oublier de mettre un Bootstrap.php vide dans chaque module qui ressemble à:

<?php 
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 
    //put your code here 
} 

aussi peut aider certaines configurations pour spécifier le préfixe du module par défaut, le mien ressemble à:

resources.frontController.params.prefixDefaultModule = "" 

et mon module par défaut est les répertoires d'application d'origine pour les contrôleurs, les modèles et les vues. Tout comme votre configuration actuelle.

[EDIT]

Ok vous avez obtenu dans un peu de désordre, peut-être que vous prenez alook au tutoriel de Rob Allen sur modules in ZF 1.x qui est où j'ai appris.

+0

Merci pour votre réponse, j'ai suivi ces étapes et ne semble toujours pas aller nulle part. Il semble que tout ce que je change l'erreur reste le même. –

Questions connexes