2012-07-19 83 views
1

我一直在尝试编写一个基本身份验证系统作为我为了了解Zend Framework而使用的项目的一部分。我一直在使用Zend CLI工具来帮助创建我的应用程序。我有一个名为Admin的模块,其中我有一个名为Auth的控制器。然而,当我尝试导航到该控制器在浏览器中,我得到了以下错误:由你越过指定了无效的控制器(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', 
) 

您可以查看该为自己zend.danielgroves.net

至于我能告诉所有命令都是正确命名的,看看下面的截图,看看CLI工具如何构造所有东西。这是我在试图构建这个登录系统http://akrabat.com/zend-auth-tutorial/时遵循的指南。我刚刚登录屏幕截图(第一张图片)。

Zend Directory/File structure

任何帮助将不胜感激。

编辑1

我的application.ini文件发表@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 

通过的application.ini变化所产生的PHP错误:

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 

编辑2:编辑2:

好吧,我刚刚尝试了下面的罗斯史密斯二世在答案中提出的建议。我的application.ini文件现在读:

[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 

,我在浏览器中收到此错误:

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 

见自己:http://zend.danielgroves.net/admin/auth/

编辑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

你是否在'application.ini'中用'resources.modules [] =“”'('section [bootstrap]')行启用了模块资源? – ByteNudger 2012-07-19 14:38:05

+0

@ByteNudger看到我在上面的帖子编辑,不幸的是它并没有解决这个问题。 – 2012-07-19 14:48:20

+0

对不起'(section [bootstrap])'不应该在'application.ini'中。只是作为评论而已。请删除它并重试。 – ByteNudger 2012-07-19 15:02:49

回答

0

这是我做了一些几个月前

你可以看到整个代码在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 

在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; 
    } 
} 

希望帮助解决您的问题。

0

使模块在Zend中可以正常工作b非常具有挑战性。我们遇到了许多意想不到的问题,例如多个数据库连接被初始化(每个模块一个)。

首先,我会改变你的application.ini包括以下内容:

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[] = 

如果不帮助,请尝试更改Adminadmin因为我们从来没有使用大写的模块名称。

如果您仍然卡住,请张贴您的application.ini文件。

+0

感谢您的回复。不幸的是,我仍然不会去任何地方,但已经添加了我的application.ini文件。 – 2012-07-19 14:55:12

+0

我在这里还应该注意到,我尝试将'Admin'文件夹重命名为'admin',并分别更改'application.ini'文件中的每个实例。 – 2012-07-19 14:58:02

0

我添加的所有模块都可以在ZF 1.11应用程序中使用,这三行代码就是我的application.ini文件。

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

也使autoloadiong正常工作确保你不要忘了把一个空Bootstrap.php,看起来像每个模块中:

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

也可以帮助一些配置,以指定前缀我的外观如下:

resources.frontController.params.prefixDefaultModule = "" 

和我的默认模块是控制器,模型和视图的原始应用程序目录。很像您当前的配置。

[编辑]

好吧,你已经得到了成有点乱,或许你看看罗布·艾伦的教程alook上modules in ZF 1.x这就是我的教训。

+0

感谢您的回复,我已按照这些步骤操作,但似乎仍无法获取任何地方。看来,无论我改变错误保持不变。 – 2012-07-23 08:50:43