您的位置:首页 > 编程语言 > PHP开发

和Zend Framework 一起成长(二)

2009-03-27 17:34 555 查看
上接:和Zend Framework 一起成长(一)

网站
我们打算建立一个非常简单的库存系统网站,它用来管理我们的CD 收藏。在主页上将列出我们的收藏并允许我们添加,编辑和删除这些收藏的CD。我们打算把这些存储到一个数据库里。数据库的设计是这样的:




1.JPG


所需要的页面
下面这些页面是必需的。




2.JPG


组织页面
在设置文件之前,理解Zend Framework 如何组织页面很重要。每个应用程序的页面叫做”action”,许多”action”组成控制器。例如,对于这样一个格式的URL http://localhost/zftutorial/news/view 控制器是news, action 是view。 它允许把相关的action 组织成组,例如, 一个news 控制器可以有current, archived和view 的actions。Zend Framework 的MVC 系统也支持把控制器组成模块(module),但这个教程没有足够大到必须用它。
Zend Framework 控制器把index 作为一个缺省的action 而保留为特别的action。 这样,对于http://localhost/zf-tutorial/news/ 这样的url,在news 控制器里的indexaction 将被执行。Zend Framework 也保留了一个缺省的控制器,也毫不惊讶地叫做index。
这样,http://localhost/zf-tutorial/ 将执行index 控制器下的action index。作为一个简单的教程,我们不打算涉及“复杂的”事情如登陆,那将作为另外一个教程… …因为我们有四个页面用于albums,我们将把他们当作四个actions 组织到一个单个的控制器里。我们将使用缺省的控制器和四个actions,如下表:




3.JPG


设置控制器
现在可以设置控制器了。 在Zend Framework 里,控制器是一个必需被叫做{Controller name}Controller 的类。注意{Controller name}必需以大写字母开头。并且,这个类必须在叫做{Controller name}Controller.php 这样的文件中,这个文件还必需在特定的控制器目录中。强调一下,{Controller name}必需以大写字母开头并其他字母一定是小写。每个action 是在控制器类里的public 函数,名字必需是{action name}Action。在
这里,{action name}应该以小写字母开头。

这样在文件zf-tutorial/application/controllers/IndexController.php 里我们的控制器类叫做IndexController:
zf-tutorial/application/controllers/IndexController.php

开始,我们让每个action 输出它们的名字,导航到下表的URL 做测试:




4.JPG


现在,我们在程序里有个能工作的路由器和能够在每个页面被执行的正确的action。如果它不能工作,请到本教程后面查阅“故障排除”一节,看看能否得到帮助。
好啦,现在来做视图。

设置视图
Zend Framework 的视图叫做Zend_View,有点顾名思义。视图将允许我们把显示页面的代码从action 函数里分离出来。
基本的Zend_View 的用法是:
$vie

QUOTE:
w = new Zend_View();
$view->setScriptPath('/path/to/view_files');
echo $view->render('view.php');
如果我们打算直接把这个骨架放到action 函数并重复这个对action 毫无意义的代码,这将非常容易。但我们宁愿在其他地方初始化它,然后在action 里使用这个已经初始化过的对象。

Zend Framework 的设计者已经预料到这类问题并提供了方案,它放在Zend_Controller_Action 里。有两个助手函数:initView()和render()。 initView()函数创建Zend_View 对象并赋值给给$view 属性,准备好让我们赋值给它。它也设置Zend_View 对象去查找views/scripts/{controller name},以便视图脚本被调用。视图脚本通过render()来调用,它将调用脚本{action_name}.phtml 并追加到响应对象的body 里。响应对象用来把所有的
头,body content 和MVC 系统产生的异常放在一起。前端控制器接着自动地发送头以及紧接着的在dispatch 尾端的body content。

To integrate the view into our application we need to initialise the view in the init() function and then ensure we call render() in each action. We also need to create some view files with test display code.

为了集成视图到程序中,我们需要在init()函数里初始化视图并确保在每个action 里调用render()。我们也需要创建一些带有测试显示代码的视图文件。

如下修改 IndexController。(被修改的部分是黑体字)。正如你看到的,我们添加一个新的函数叫做init(),它被Zend_Controller_Action 的构造器自动地调用。这就确保视图能够在开始被初始化并且我们确信它已经准备好能被用在action 函数中。
zf-tutorial/application/controllers/IndexController.php

在每个函数中,我们分配一个title 变量给视图属性,接着,调用render()来显示视图模板。注意在这点上实际的显示并没有发生-它在dispatch 进程结束后由前端控制器来完成。

我们现在需要做四个视图文件。这些文件就是所知的模板并且render()方法期望每个模版文件的命名在它的action 之后并且带有.phtml 的扩展名来表明它是模板文件。模板文件必须在名字在控制器之后的子目录中,所以这四个文件是:
zf-tutorial/application/views/scripts/index/index.phtml

zf-tutorial/application/views/scripts/index/add.phtml

zf-tutorial/application/views/scripts/index/edit.phtml

zf-tutorial/application/views/scripts/index/delete.phtml

测试每个控制器/action,它们应该显示出四个黑体字标题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: