我在寻找如何从正常的文件夹结构去左边其中application
文件夹包含models,views,controllers
,到基于模块的文件夹结构上正确的一步一步的解释,其中application
包含其中包含一个modules
文件夹各个模块用自己的models,views,controllers
。
我说的“转换”,因为我不认为Zend公司让我们创建一个使用从一开始的模块建筑项目,但如果它没有,那将是膨胀,将消除需要使这些文件夹结构手动更改。
这是我迄今为止的经验
zf create module product
,生成模块和文件夹在其内部产生的文件夹product
并且也产生该模块的views,controllers,models
。views,controllers,models
移动到自己的modules/default
文件夹。如果我手动创建该文件夹和移动的主要views,models,controllers
那里,我想新的控制器添加到default
模块时,得到一个错误。该缺陷是views,controllers,models
它重新产生主(现在下落不明)application
并插入在application/controllers/newcont
新的控制器,因为它不承认默认控制器文件夹已被手动移动到application/modules/default/controllers/
。zf create module default
然后复制主views,models,controllers
那里。它结束了寻找相同的,但不知何故zf create module
方法有差别。当我这样做,这样一来,新的控制器会添加到正确和application/modules/default/controllers
不application/controllers
一半的问题就迎刃而解了。但是,当我尝试查看应用程序,我没有看到index/index
视图东西。我没有得到任何错误,要么,但我什么也看不到。我怀疑这是因为应用程序不知道index/index
观点移动。
application/views/scripts/index/index.phtml
application/modules/default/views/scripts/index/index.phtml
我猜我需要做出改变的application.ini或bootstrap.php中或其他位置。那么究竟是什么让这件事顺利完成,得到它的工作步骤?我使用的是最新的ZF 1.10.8。请从开始创建一个新的Zend的项目,所以有确切的步骤,没有混乱。
这是我做了尝试,并按照你的榜样(从零开始):
$ zf create project .
$ zf create module product
$ zf create module default
然后我感动controllers
,models
和views
从./application
到./application/modules
。
接下来,我打开了的application.ini,并替换这一行(它告诉ZF在哪里可以找到在非模块化的应用程序控制器):
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
有:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
它告诉ZF在哪里可以找到模块。
我然后手动创建索引控制器的产品模块,所以我可以测试这个工作,它做到了。然后我打http://localhost/index/index,看是否默认模块index动作仍然工作,它没有,而是我得到了错误:
致命错误:未捕获的异常“Zend_Controller_Dispatcher_Exception”与消息“无效的控制器类(‘Default_ErrorController’)” ......
听起来这是你得。
有两种方法来解决这个错误,并且该文档是非常容易引起误解(甚至可能是错误的)。它states:
请注意,在缺省模块中,控制器不需要一个命名空间前缀。因此,在上述的例子中,默认模块中的控制器不需要“DEFAULT_”的前缀 - 它们是根据其基本控制器名简单地分派:“索引控制器”和“FooController”被。命名空间前缀被用于所有其它模块,但是。
但很明显,上述错误表明,ZF正在寻找所谓的Default_ErrorController的ErrorController类。为了解决这个问题,你可以做两件事情之一:
IndexController
到Default_IndexController
和应用程序/模块/默认/控制器/ ErrorController.php从ErrorController
到Default_ErrorController
从的application.ini。这行告诉ZF使用的默认模块类“DEFAULT_”命名空间,所以没有它会只认准“的IndexController”。我去选择后者,然后http://localhost/index/index发挥预期。
在你的情况,你说你在/索引/指数,这意味着要么得到一个空白页:
检查最后的选择,开放的application.ini并暂时phpSettings.display_errors
从0生产部分更改为1。如果随后得到同样的错误我在上面了,希望你能得到的一切工作。
我希望这是有帮助的。我能说的是不要太依赖于Zend_Tool为您的应用程序的管理 - 它不能做的一切,而且往往更容易手动移动周围的事物,而不是试图通过和做的一切。的ZF命令;特别是改制时。
嗯,我dev的Netbeans IDE中。
http://i.stack.imgur.com/n9Zjn.jpg
我是一个新手:P(需要10点)
每个引导应该有:
<?php
// Public_Bootstrap replace for Blog_Bootstrap or Administrator_Bootstrap
// well its for me
class Public_Bootstrap extends Zend_Application_Module_Bootstrap {
}
主引导程序:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initAutoLoad() {
$modLoader = new Zend_Application_Module_Autoloader(
array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/modules/public'
)
);
return $modLoader;
}
public function _initViewHelpers() {
$this->bootstrap(array('frontcontroller', 'view'));
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv("Content-Type", "text/html;charset=UTF-8")
->appendName("description", "Some description");
}
}
的application.ini:
[production]
resources.modules[] =
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.defaultmodule = "public"
resources.frontController.prefixDefaultModule = true
resources.view[] =
resources.db.adapter = PDO_MYSQL
resources.db.isDefaultTableAdapter = true
resources.db.params.host ="localhost"
resources.db.params.username ="yourUser"
resources.db.params.password ="yourPassword"
resources.db.params.dbname ="DBName"
我的引导有更多的代码,包括插件。