天天看点

zendframework分模块(modules)配置多视图(layouts)综合配置

zendframework分模块(modules)配置多视图(layouts)综合配置

图片:1.gif

许多人在使用过程中都会遇到这样那样的问题,我在这里,简单介绍一下如何使用zend framework创建模块化(并且使用layout进行布局)的应用程序。

让大家看看我最终的目录结构。

[attachment=32141]

看到了吗?

1、我在application文件夹下建立了一个modules文件夹,这个文件夹下建立了两个模块,分别是admin、default

2、我的layout布局分了两部分,一个是admin模块使用的layout,在admin/layouts/scripts文件夹下,另一个是default模块的layout,在application/layouts/scripts文件夹下。

下面讲解步骤。

1、准备工作

首先假设你已经部署了web服务器和php,并下载了zend framework,建议大家使用xampp中的xampp-shell窗口来创建了一个原始的zend framework项目(原因很简单——很规范,不像有些视频教程中写的,只能让application跑起来,但是当application大点的时候,他们的方法就打折扣了)。

2、建立模块

现在我们来创建一个admin模块,目录如下: 

application/modules/admin/controllers 

application/modules/admin/models 

application/modules/admin/views 

application/modules/admin/views/scripts 

application/modules/admin/views/helpers 

application/modules/admin/views/filters 

并创建以下文件: 

application/modules/admin/controllers/IndexController.php(类名为Admin_IndexController) 

application/modules/admin/views/scripts/index/index.phtml 

除了新建模块文件之外,还需要在配置文件application.ini添加关于模块的配置内容(添加内容为图中蓝色部分)

[attachment=32145]

现在我们就可以通过 http://localhost/public/模块名来访问我们的创建的admin模块和default模块。至此模块的配置工作完成了,现在来做不同模块下layout的配置工作。

3、视图建立

首先我们现在上面的两个layouts文件夹下新建我们的layout视图

zendframework分模块(modules)配置多视图(layouts)综合配置

这里强调一点(蓝色代码部分),我们使用了“<?php echo $this->partial("footer.phtml") ?>”这样的语句在layout.phtml中添加了另一个视图页面。

这时如果访问 http://localhost/public,你会发现我们访问的default模块是可以正常显示的,但是访问 http://localhost/public/admin时,你会发现系统并没有使用期望的admin的layout.phtml作为布局文件,而是使用了默认default模块的layout.phtml。这是因为admin那行配置并不是系统默认能处理的有效配置,所以我们要自己来处理它。

3、admin的Bootstrap.php的建立

首先我们新建文件:library/Jlxu/Controller/Action/Helper/LayoutLoader.php, 

代码如下:

class Jlxu_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract

{

public function preDispatch()

{

$bootstrap = $this->getActionController()

->getInvokeArg('bootstrap');

$config = $bootstrap->getOptions();

$module = $this->getRequest()->getModuleName();

if (isset($config[$module]['resources']['layout']['layoutPath'])) {

$layoutPath =

$config[$module]['resources']['layout']['layoutPath'];

$this->getActionController()

->getHelper('layout')

->setLayoutPath($layoutPath);

}

}

}

这个文件的作用就是判断你访问的是哪个模块,然后为不同的模块调用不同的layout.phtml。

    我们要充分发挥模块的强大功能,我们还需要为模块添加一个启动文件——Bootstrap.php。它可以使得你在事个模块中方便的使用类资源,models, filters, helpers等。在admin下新建Bootstrap.php,代码如下:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap 

protected function _initLayoutHelper()

{

$this->bootstrap('frontController');

$layout = Zend_Controller_Action_HelperBroker::addHelper(

new Jlxu_Controller_Action_Helper_LayoutLoader());

}

}

并且在application/Bootstrap.php文件里加入以下方法:

protected function _initAppAutoload() 

$autoloader = new Zend_Application_Module_Autoloader(array( 

'namespace' => 'App', 

'basePath' => dirname(__FILE__), 

)); 

return $autoloader; 

4、大功告成

现在你已经可以使用不同的layout来配置不同的module了,试试吧

继续阅读