博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Simple Zend_Layout Example
阅读量:2339 次
发布时间:2019-05-10

本文共 3527 字,大约阅读时间需要 11 分钟。

最近又看了一下最新版的Zend Framework代码;新出来的功能主要是Zend_Layout和Zend_Form。
都挺强大的;的确方便开发;本想自己写了例子,结果网上发现写过这么一篇实例文章;干脆翻译过来得了。
(没和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(控制器文件)文件包括两个方法:
1init() 初始化(译:根据Zend_Controller_Action 执行过程,所有的action执行过程都是依次执行init()preDispatch()actionpostDispatch()
这里的初始化只是关联sidebar标志符到一个指定的视图文件。

2indexAction() 就是放一些文本内容到视图内。 

<?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();

转载地址:http://sqwvb.baihongyu.com/

你可能感兴趣的文章
实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit()).md
查看>>
链表排序.md
查看>>
进程与线程的区别与联系、进程与线程的通信方式
查看>>
C++与C的区别
查看>>
产生死锁的必要条件及处理方法
查看>>
TCP和UDP的区别
查看>>
TCP状态中 time_wait 的作用
查看>>
事务具有四个特性
查看>>
树的先序、中序、后序和层次遍历-C++实现
查看>>
static和const关键字的作用
查看>>
Hadoop Hdfs 配置
查看>>
tsung集群测试
查看>>
oracle定时删除表空间的数据并释放表空间
查看>>
servlet文件上传下载
查看>>
解决文件提示: /bin/ksh^M: bad interpreter: bad interpreter:No such file or directory
查看>>
ajaxanywhere jsp 使用
查看>>
jquery的使用
查看>>
如何静态化JSP页面
查看>>
XML 与 Java 技术: 用 Castor 进行数据绑定
查看>>
Python未知领域系列:(附Python学习教程+Python学习路线)Python高级教程之面向对象
查看>>