PHP开发利器-PRADO 1.6(3) - 站长中国 (http://www.zzchina.net) -- 技术教程 (http://www.zzchina.net/article/) --- PHP开发利器-PRADO 1.6(3) (http://www.zzchina.net/article/28/27158.htm) |
| -- 作者:未知 -- 发布日期: 2005-12-23 |
2.3 应用 每一个 PRADO Web应用都有且只有一个的实例。它主要是负责编码解码用户请求,服务器的页面请求,和维护应用级别的参数。 2.3.1 应用的配置 每一个PRADO应用都应该有一个XML格式的配置文件。在"hello world"这个例子中,这个文件的文件名为 application.spec . 应用配置文件的格式如下: <?xml version="1.0" encoding="UTF-8"?> alias 元素定义了文件路径的别名,路径可以是绝对是绝对路径也可以是相对路径。 using 元素定义了要增加到 PHP搜索路径 include_path 变量中的命名空间。命名空间是用"."号连接的。第一段是路径的别名,之后是子目录。比如System.Web.UI 代表了框架所在目录下的Web/UI/子目录。框架的目录的别名已经被定义成System 。在编程的时候,也可以调用using() 函数来增加一个命名空间。 secured 标签知名了页面是否需要验证/授权,page 属性指名的是页面的名称或者是页面名称的匹配表达式。如果一个页面被标明是的,那么说明这个页面需要用户验证的。另外如果role 属性不是空的,那么要求用户是属于指定的角色的。 parameter 元素定义了用户参数。可以通过设置parameter 元素的file 属性来导入一个参数文件。参数文件的格式如下: <?xml version="1.0" encoding="UTF-8"?> default-page 属性和 cache-path 属性分别知名了缺省的页面和缓存路径。如果应用需要使用session, session-class 属性也需要设置。如果应用需要使用框架的验证/授权支持,那么还应该指定user-class 属性。 2.3.2 页面服务 PRADO 使用 GET 变量 page 来指明要请求的页面。比如下面的这个URL: /examples/phonebook.php?page=AddEntryPage 这段代码将会请求 AddEntryPage 页面。如果没有指定page 变量,那么就会调用应用配置中的缺省页面。 你也可以使用 TApplication::constructUrl() 方法来请求一个页面。 2.3.3 数据编码和解码 缺省情况 TApplication 会对所有的POST和GET数据进行HTML编码。 ', ", <, >, & 会被转化为',"e;,<,>和&。之所以要进行编码主要是为了让这些字符能被保存到数据库中,并且能正确显示回给用户。如果有必要的话,可以调用pradoDecodeData()函数来进行解码。也可以重载TApplication::beginRequest() 函数不进行编码。 2.4 定义新组件有两种方法来定义新的组件类:继承和组合。 继承是面向对象的设计概念。派生类定义它的父类的一些内容,还可以提供一些其他的功能。在PRADO框架中,组件的属性和事件都是可以继承的。派生类也可以提供更多的属性和事件。所有的组件类都应该从TComponent 或者它的派生类继承。 所有父组件的属性和事件会被派生组件类继承。 组合是用于基于组件的框架的。在PRADO中,主要对控件使用。一个新的控件类可以被定义为几个其他几个控件的组合。新的类负责协调这些控件之间的通信,并代表它们和外界通信。比如可以定义一个LabeledTextBox 控件类(继承TControl ),它由TLabel 一个控件和一个TLabel 一般的约定(并不强求),控件的ID和属性的首字母应该大写,比如HomePage, NavigateUrl, 要定义一个新的组件通常需要写一个组件类文件,一个规格文件和一个模板文件。有些时候后面两个文件可以不要的。 2.4.1 定义属性 组件的属性在组件类的规格文件中定义,规格文件的语法如下: <?xml version="1.0" encoding="UTF-8"?> 在这里,name 用来唯一标识属性;get 定义了一个类方法来读取属性,set 定义了一个类方法来写属性,type 定义了属性的类型(string, integer, float, boolean, array 和object),default 标识了属性的缺省值。其中name 属性是必须的。getter方法的语法如下: function getterMethodName() 如果一个属性是不可读的,那么不要设置get 属性。setter方法的语法如下: function setterMethodName($value) 如果一个属性是不可写的,那么不要设置set 属性。如果这个属性的类型是string,那么也可以不指明。类型的属性用来自动转换配置在规格文件或者模板文件中的属性初始值。default 可以用下面的语法定义组件的组件属性: <?xml version="1.0" encoding="UTF-8"?> 这里type 属性指明了组件类的名称,IDID 属性指明了属性名称。property 元素和event 元素指明了对应的初值。 当组件被创建的时候,它的组件类型属性会自动被实例化。 2.4.2 定义事件 组件事件在规格文件中定义,而其内在的实现机制在类文件中定义。在规格文件中定义事件的语法如下: <?xml version="1.0" encoding="UTF-8"?> 事件的name应该是一个合法的变量名。 在类文件中,通常会实现这么一个对应的方法(假定事件的名称叫 OnClick): function onClick($param) 当这个事件实际发生的时候,这个 onClick 方法应该确实被调用了(参考框架的TButton.php 2.4.3 编写模板文件 在这一节里,会讲一些关于如何编写模板文件。模板是用于控件的,当时也不是所有的控件都需要模板。比如TTextBox, TButton 这些控件因为没有内容,因此就不需要模板。模板文件一般用于页面或者基于组合定义的控件。 模板中的注释,比如 <!-- ... --> 被作为静态文本处理。 可以在组件标签之外通过属性标签<prop:...>来配置组件的属性。比如可以用以下的代码配置模板中TTextBox 控件的Text 属性。 ... 在一对属性标签中间的内容作为对应的组件属性的值。如果一些属性的值需要很大的数据,这样就很方便。 在模板文件中可以使用3种特殊的标签:
2.5 总结 这一节我们来总结一下如何基于PRADO来开发一个Web应用。 首先需要创建两个文件:应用的入口文件和应用的配置文件。这一部分请参考本手册前面的"Hellow,world!"这个例子。 对于一个完整的Web应用而言,你还需要创建一个或者多个页面。每一个页面都需要有一个页面类文件,另外可能还需要一个模板文件或者规格文件。在模板文件中,你可以把组件和其他静态文本根据最终需要显示给用户看的样子组织在一起。在规格文件中,可以定义页面的属性,事件和子控件,这些定义可以在模板文件和代码中使用。这两个中都可以设置组件的初始值和指定事件的响应函数。在页面类文件中编写事件响应函数和其他函数。 有些时候,为了重用代码,你可以定义新的组件。比如你可以定一个SideBar组件来显示用户能看到的菜单,这样在各个页面中就都可以直接使用这个SideBar 组件来显示菜单了。 PRADO引入了PHP5新的例外处理机制,能够显示堆栈中的错误信息。这样在调试的时候你可以精确的找到什么方法发生了什么错误。 发布 PRADO 应用则非常简单。框架建议使用相对路径,因此如果你是这么做的话,只需要把包含你的应用的代码拷贝到你想放置的目录中就可以了。 |
| zzchina.net |