对于Zend的项目模块基于一步一步转化成文件夹结构

问题描述 投票:8回答:2

我在寻找如何从正常的文件夹结构去左边其中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/controllersapplication/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的项目,所以有确切的步骤,没有混乱。

php zend-framework zend-view
2个回答
10
投票

这是我做了尝试,并按照你的榜样(从零开始):

$ zf create project .
$ zf create module product
$ zf create module default

然后我感动controllersmodelsviews./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.php从IndexControllerDefault_IndexController和应用程序/模块/默认/控制器/ ErrorController.php从ErrorControllerDefault_ErrorController
  • 或删除此行: resources.frontController.params.prefixDefaultModule = “1”

从的application.ini。这行告诉ZF使用的默认模块类“DEFAULT_”命名空间,所以没有它会只认准“的IndexController”。我去选择后者,然后http://localhost/index/index发挥预期。

在你的情况,你说你在/索引/指数,这意味着要么得到一个空白页:

  • 你有一个不同的问题
  • 你已经在开发模式中禁用错误
  • 您是在生产模式下运行的位置错误默认情况下禁用(最有可能)

检查最后的选择,开放的application.ini并暂时phpSettings.display_errors从0生产部分更改为1。如果随后得到同样的错误我在上面了,希望你能得到的一切工作。

我希望这是有帮助的。我能说的是不要太依赖于Zend_Tool为您的应用程序的管理 - 它不能做的一切,而且往往更容易手动移动周围的事物,而不是试图通过和做的一切。的ZF命令;特别是改制时。


1
投票

嗯,我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"

我的引导有更多的代码,包括插件。

© www.soinside.com 2019 - 2024. All rights reserved.