Zend应用程序中前端/后端的独立布局和命名空间

时间:2011-09-20 11:24:35

标签: model-view-controller zend-framework layout frontend backend

我必须使用Zend Framework开发CMS,并且我使用我的boostrap中为我的后端定义的默认命名空间:

autoloaderNamespaces[] = "Application_"

现在我想开发前端,但我不知道该怎么做,因为我可以从/public/目录访问我的后端。

然后我想为我的前端使用不同的布局,而不是我用于后端访问的布局。所以我发现this post但我不知道是否必须更改/添加(以及如何更改)我的后端模块,或者我是否必须创建第二个模块,我将用于我的前端

我的文件树是这样的:

tree

因此,如果我创建一个frontend模块,我是否应该在frontend目录旁边创建一个application目录?

编辑:我在应用程序目录旁边创建了2个目录pubfrontend。在pub/index.php中,我使用application/configs/application.ini文件的APPLICATION_FRONT_ENV文件实例化了引导程序:

[frontprod : production]

bootstrap.path = APPLICATION_FRONT_PATH "/bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_FRONT_PATH "/controllers"
autoloaderNamespaces[] = "Frontend_"
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_FRONT_PATH "/layouts/scripts"

[frontdev: frontprod]

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

以及frontend/bootstrap.php我在application目录中加载的模型:

public function _initAutoloader(){

        $baseAutoload = new Zend_Loader_Autoloader_Resource(array(
                                    'namespace' => 'Application',
                                    'basePath' => realpath(dirname(__FILE__).'/../application')
                                )
                            );

}

似乎工作正常=) 谢谢!

1 个答案:

答案 0 :(得分:1)

在Zend Framework中,您可以在模块中组织您的应用程序,这非常适合您的需求。遗憾的是,该文档没有充分强调这一概念的重要性,以及您应该如何从第一天开始实施它。

模块允许您在同一模块文件夹下重新组合与此模块相关的所有内容,这样就可以在逻辑组中隔离应用程序的“部分”。 在你的情况下,它将是“后退”和“前面”,但你也可以有一个“论坛”模块或让我们说一个“商店”模块。

从网址的角度来看,模块化结构的默认路由是example.com/module/controller/action,但是using hostname routes你也可以将www.example.com指向你的“前端”模块和admin.example.com指向你的后端。

看一下poor documentation section about modules,不要惊慌,如果你在“默认”模块中移动当前的控制器,视图和模型,就不必重命名所有内容。

还有另一种替代方案可以很好地适用于后端/前端逻辑,但如果你想将代码拆分为更合理的部分(论坛,博客,商店......)则不行。您只需在'application'文件夹旁边创建第二个应用程序文件夹(您可以命名为'frontend'),然后创建第二个公共目录(如果您使用相同的文件,则可以将您的资产文件夹符号链接),以及另一个名称空间。

为了能够在您的前端代码中自动加载“Application_”类,只需在前端引导程序中添加并配置Module Autoloader即可。代码非常简单:

//in your frontend/Bootstrap.php
public function _initAutoloader(){
     new Zend_Loader_Autoloader_Resource( array(
             'namespace' => 'Application_',
             'path' => realpath(dirname(__FILE__).'/../application'
         )
     );
}

对于application.ini配置文件,我建议您创建一个部分[frontprod : production]部分,而不是复制它,您可以覆盖后端设置(并为您的本地设置匹配的[frontdev: frontprod]设置)。

我希望这有帮助。关于这里介绍的所有主题有很多话要说,你应该首先看看这个,然后用你可能遇到的问题的更具体的问题评论这个答案,我会扩展答案。