最近又看了一下最新版的Zend Framework代码;新出来的功能主要是Zend_Layout和Zend_Form。 都挺强大的;的确方便开发;本想自己写了例子,结果网上发现Akra Blog写过这么一篇实例文章;干脆翻译过来得了。 (没和Akra联系,不知道算不算版权文问题) 第一次翻译;大家将就着看。 http://akrabat.com/2007/12/11/simple-zend_layout-example/ Zend_Layout终于放出来了,这里是一个利用Zend_Layout的简单MVC例子。
这个例子里包括三个视图文件: 一个外部框架型文件(the outer layout file), 一个基于action的视图文件(the index action viewscript), 和一个右边菜单文件(a right hand side bar)。 本帖将讲述如何创建这些文件。代码附在帖子之后。(译:到这个老兄网站上下载吧) 开始 这是一个目录结构: 正像你看到的,这是一个基本结构图。我们创建一个indexController控制器。为了更好的显示,我创建一个视图帮手文件来正确显示css等文件。 (译:这个视图帮手文件奇简单无比;像我的开发中,一般都放在Action的init()中获取,然后传给视图) $fc =Zend_Controller_Front::getInstance(); $request =$fc->getRequest(); /* @var $request Zend_Controller_Request_Http */ return$request->getBaseUrl(); 先让我们看看启动文件(bootstrap file) <?php define('ROOT_DIR', dirname(dirname(__FILE__))); // Setup path to the Zend Framework files set_include_path('.' . PATH_SEPARATOR . ROOT_DIR.'/lib/' . PATH_SEPARATOR . get_include_path() ); // Register the autoloader require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); // Initialise Zend_Layout's MVC helpers Zend_Layout::startMvc(array('layoutPath' => ROOT_DIR.'/app/views/layouts')); // Run! $frontController = Zend_Controller_Front::getInstance(); $frontController->addControllerDirectory(ROOT_DIR.'/app/controllers'); $frontController->throwExceptions(true); try { $frontController->dispatch(); } catch(Exception $e) { echo nl2br($e->__toString()); } (译:注意这里的layoutPath使用绝对目录) 这是一个基本的启动文件,我们使用startMvc静态方法初始化了Zend_Layout。这个方法接受一个数组型配置,其中最基本的就是目录配置。这个例子里选择ROOT_DIR.'/app/views/layouts'。 The Controller(控制器文件)文件包括两个方法: 1、init() 初始化(译:根据Zend_Controller_Action 执行过程,所有的action执行过程都是依次执行init()、preDispatch()、action、postDispatch()) 这里的初始化只是关联sidebar标志符到一个指定的视图文件。 2、indexAction() 就是放一些文本内容到视图内。 <?php class IndexController extends Zend_Controller_Action { function init() { // Render sidebar for every action $response = $this->getResponse(); $response->insert('sidebar', $this->view->render('sidebar.phtml')); } function indexAction() { $this->view->pageTitle = "Zend Layout Example"; $this->view->bodyTitle = '<h1>Hello World!</h1>'; $this->view->bodyCopy = "<p>Lorem ipsum dolor etc.</p>"; } } 视图部分视图部分分两部分。 第一部分,内部视图(the "inner" scripts)(类似sidebar或者index.phtml之类的文件), 第二部分,外部视图(the "outer" layout script),这是一个框架视图。其中很多内容需要内部视图填充。 内部视图Action视图也算内部视图。在index/index.phtml里,我们显示在indexAction里定义的值。 [php] <?php echo $this->bodyTitle ;?> <?php echo $this->bodyCopy ;?> [[/php] (译:这跟原来的视图表现是一样的) Sidebar也算内部视图。前面在init()里定义过它的视图位置。 <h2>Sidebar</h2> <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> <li>Item 4</li> <li>Item 5</li> </ul> 外部视图外部视图是layout.phtml ,我们在启动文件中定义过。它可以利用<?php echo $this->layout()->content ?>去渲染(render)一个视图片断(a named response segment)。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" cstylesheet" href="<?php echo $this->baseUrl(); ?>/main.css" type="text/css"> </head> <body> <div id="content"> <?php echo $this->layout()->content ?> </div> <div id="sidebar"> <?php echo $this->layout()->sidebar; ?> </div> </body> </html> 译:注意几个地方: 1、$this->baseUrl() 就是前面说的视图帮手,为了取得当前项目路径名,更好的显示css文件。 2、$this->pageTitle 是在indexAction中定义的。也就是说,layout框架文件里是可以接受action定义的变量的。这点很重要。 3、$this->layout()->content 默认就是当前action的视图文件,本例就是index/index.phtml内容 4、$this->layout()->sidebar 是在action中定义的,并指定显示哪一个视图文件。这个很重要。 5、高级用法,还得看文档。比如在Action里是可以控制关闭框架视图的比如: $this->_helper->layout->disableLayout(); |
Simple Zend_Layout Example
最新推荐文章于 2022-05-10 09:56:39 发布