[翻译] Zend框架和PRADO成功组合
时间:2006-06-30 来源:saillee
原文见:
http://www.alexatnet.com/Blog/Index/2006-06-28/zend-framework-and-prado-successfull-cooperation
翻译:Sail Lee
Zend框架用户界面组件还没有开发出来,这迫使开发者要寻找其他基于控件的框架并尝试在项目中一起使用。只有少数好的框架能做到,其中完美的一个就是在Zend公司的PHP5编程比赛中脱颖而出的--PRADO框架,它是一个用PHP5编写的开放源码、基于组件和事件驱动的框架。它是自由的(BSD许可),你能在开放源码和私有应用中使用它。
最佳特性选择是几乎所有开发策略和在本文中我们打算使用它的关键。MVC模式和数据层类的实现是Zend框架的强项。PRADO的优势是应用程序页面的面向组件的设计。因此我们要做的就是使用Zend_Controller和Zend_Db来响应请求、创建数据层并以PRADO的组件创建部分页面。这些页面将在相应的控制器动作中被调用。
在一些下列段落中,我将为你演示如何基于PRADO的组件创建页面并从特定的Zend_Controller动作中运行它。页面组件会建立在数据层类之上,它以Zend_Db_Table类被创建。但你首先需要阅读多点关于在此论述的技术方面文章--一个好的关于Zend_Controller的指南,对于框架的初学者来说这是必需的入门读物。应用程序的数据层可以有多种创建方式,而在Zend_Db手册中推荐的方法只是简要地描述了一下,所以关于在规划数据层类时使用数据层的文章中,我写下了一些想法。实际上,我将使用在我的文章中被定义的类来提供数据给PRADO组件。
在这需要说明一下PRADO项目的设计。一个典型的PRADO项目由放置在“pages”目录中页面文件和放置在“runtime”目录中的应用状态文件组成。“assets”目录可供选择地被创建用于存放相关媒体文件,例如图片、flash动画等。
两个文件定义一个PRADO页面:定义何种组件与它们的设计外观在页面上的模板文件和带页面事件与相关类的页面代码文件。再稍微深入并阅读PRADO模板介绍,代码文件基本包含了一个页面类,它是TPage类的子类。你可以阅读《我的首个PRADO应用》来学习该项目架构的实例和演示基本PRADO概念的“Hello World!”样板页面。
那么现在关于本文你有了一些的了解(要了解更多的信息可参见PRADO的《快速入门教程》),我们可以集中在Zend框架行为的创建上来,它将例示并运行PRADO应用类。Zend推荐的项目架构定义了“view”目录用于应用程序的表示类,它规定了由Zend_View类来使用。而我们所需的是以PRADO页面来扩展该表示文件并把它们放到“application/view/prado”目录中去。和PRADO的《快速入门教程》提及的一样,我们需要为PRADO项目建立两个或更多的目录:“pages”和“runtime”。这样,该应用的目录结构如下:
application
/controllers
/models
/views
/prado
/pages
/runtime
我们第一个PRADO页面将是HelloWorld范例。通过加入该页面,我们会检查是否我们向正确的方向前进而且我们的controller是否成功运行了该页面。该页面的源代码如下(路径与应用的根目录相关):
./application/views/prado/pages/Page1.page
./application/views/prado/pages/Page1.php
class Page1 extends TPage
{
public function buttonClicked($sender,$param)
{
// $sender refers to the button component
$sender->Text = "Hello World!";
}
}
?>
./application/controllers/PradoController.php
// the path to prado.php from the PRADO framework
require_once './prado/framework/prado.php';
// defines an action for "
http://myhost/Prado
" url.
class PradoController extends Zend_Controller_Action {
function indexAction() {
// "page" query string parameters specifies the page name
// that the PRADO framework should process.
$_GET['page'] = 'Page1';
// Create and start PRADO application.
// The constructor's argument defines path to folder
// with prado pages.
$app = new TApplication('./application/views/prado');
$app->run();
}
}
?>
上述该实例演示了如何创建单页面,那么是时候创建一个高级点的了。PRADO有许多有用的组件(汇集在System.Web.UI.WebControls命名空间中),我们对绑定数据的组件有兴趣,如DataGrid或Repeater组件。
如上,DataGrid是一个绑定数据的组件,这样我们需要提供数据给它。为此我们将使用用户数据层类,它在我的上一篇文章中被定义好了。下面的实例演示了如何放置DataGrid组件并展示来自“Users”表中的数据:
./application/views/prado/pages/Page1.page
[/code]
./application/views/prado/pages/Page1.php
[code]
class Page1 extends TPage
{
public function onInit($param)
{
if(!$this->IsPostBack)
{
$dbUsers = new DbUsers();
$users = array();
// copy data from rowset into the $users array
foreach ($dbUsers->fetchAll() as $dbUser) {
$users[] = array('id' => $dbUser->id,
'name' => $dbUser->login);
}
$this->Users->setDataSource($users);
$this->Users->dataBind();
}
}
}
?>
./application/controllers/PradoController.php
require_once './prado/framework/prado.php';
// The database.php file contains the "DbUsers" class
require_once './application/models/database.php';
class PradoController extends Zend_Controller_Action {
function indexAction() {
$_GET['page'] = 'Page1';
$app = new TApplication('./application/views/prado');
$app->run();
}
}
?>
趣味来了,你现在可以到PRADO的wiki上在《TDataGrid使用教程》中学多点关于DataGrid组件的东西。停在那里,多读点关于PHP编程和其他有趣的东西。
相关阅读 更多 +