Zend framework 指定的控制器无效(身份验证)
我一直在尝试编写一个基本的身份验证系统,作为一个项目的一部分,我打算使用它来了解Zend框架。我一直在使用Zend CLI工具帮助创建我的应用程序。我有一个名为Admin的模块,其中有一个名为Auth的控制器。但是,当我尝试在浏览器中导航到控制器时,会出现以下错误:Zend framework 指定的控制器无效(身份验证),zend-framework,Zend Framework,我一直在尝试编写一个基本的身份验证系统,作为一个项目的一部分,我打算使用它来了解Zend框架。我一直在使用Zend CLI工具帮助创建我的应用程序。我有一个名为Admin的模块,其中有一个名为Auth的控制器。但是,当我尝试在浏览器中导航到控制器时,会出现以下错误: An error occurred Page not found Exception information: Message: Invalid controller specified (auth) Stack trace
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工具是如何构造所有东西的。这是我在尝试构建这个登录系统时遵循的指南。我刚刚到达登录屏幕截图第一张图片的部分
任何帮助都将不胜感激
编辑1
My 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:
好的,我刚刚尝试了罗斯·史密斯二世在下面的答案中提出的建议。我的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
你自己看看:
编辑3
让模块在Zend中正常工作可能非常具有挑战性。我们遇到了许多意想不到的问题,例如每个模块初始化一个多个数据库连接 首先,我将更改您的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[] =
如果这没有帮助,请尝试将Admin更改为Admin,因为我们从未使用大写的模块名称
如果您仍然被卡住,请发布您的application.ini文件。为了使模块在使用ZF 1.11的应用程序中工作,我在application.ini中添加了这三行代码
resources.frontController.moduleControllerDirectoryName = "controllers"
resources.modules = ""
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
另外,为了确保Autolodiong正常工作,请确保不要忘记在每个模块中放置一个空的Bootstrap.php,如下所示:
<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
//put your code here
}
resources.frontController.params.prefixDefaultModule = ""
我的默认模块是控制器、模型和视图的原始应用程序目录。与您当前的配置非常相似
[编辑]
好吧,你已经有点乱了,也许你可以看看Rob Allen的教程,这就是我学习的地方。这是我几个月前做的事 您可以在上看到整个代码 在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;
}
}
希望这有助于解决您的问题。您是否在application.ini中使用resources.modules[]=section[bootstrap]?@ByteNudger请参阅上面的文章中的我的编辑,很遗憾,它没有解决问题。很抱歉,[bootstrap]部分不应该在application.ini中。这只是作为评论。请删除此项并重试。遗憾的是,仍然没有更改。我能提供任何其他信息来帮助诊断吗?您是否同时使用了我和罗斯·史密斯二世的更改?如果是,只使用第一次编辑1中的application.ini并删除我前面提到的错误。模块中的目录名也使用小写名称。谢谢您的回复。不幸的是,我似乎仍然不想去任何地方,但已经在上面添加了我的application.ini文件。我还应该注意,我确实尝试将Admin文件夹重命名为Admin,并分别更改了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 "/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
<?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;
}
}