PHP开发利器-PRADO 1.6高级主题

ado|高级

第4章 高级主题 

4.1  显示状态的维护

  组件的显示状态是指组件在一系列的postback中应该始终保存的数据。比如,用户在一个页面中更改了一个组件的字体颜色,他希望页面再一次提交显示的时候,依然看到的是已经修改过的颜色。在桌面GUI程序的开发中,这个非常简单。但是在Web编程中就不那么容易了,因为Web服务器并不会一直在内存中保持着页面状态。PRADO借鉴了ASP.NET的显示状态这个概念来解决这个问题。

  如果要通过显示状态来保持一些数据,可以调用TComponent 类中的getViewState() 和  setViewState() 方法。可以在显示状态中保持很多类型的数据,但是不用把它用在资源句柄中,比如数据库联接。

PRADO

  通过一个把限制状态保存在一个隐藏字段中来返回给用户。当用户提交页面并再一次显示页面的时候,显示状态中的数据会从被提交的隐藏域中读出来并用此恢复页面的状态。可以通过重载的方法来自己定制显示状态的存储方法。比如可以把显示状态保存在session中或者数据库中,避免通过隐藏字段要传输大量的数据。

4.2  Session

  Session是用来在不同页面间保存状态的,这和页面的显示状态机制不同,显示状态只能保存本页面的状态。

  如果要使用session, 那么首先在应用的配置文件中定义一个session类。session类必须实现ISession
接口。如果你不想自己写一个session类,那可以使用类System.Security.TSession ,它封装了$_SESSION 变量来实现了ISession 接口。你也可以自己写一个session类来使用不同的方法处理session(比如把session保存到数据库中)。

  如果定义了session类,在请求的页面创建之前,对应的session对象就会被创建。TPage 页面类有一个Session 属性,可以方便的来访问session对象。

4.3  验证和授权

  PRADO 提供了一个验证/授权的框架来支持验证页面的访问者,判断他们是否有权限来访问页面。

  在验证框架中,一个用户类起到了主要作用。访问者如果通过了一定的身份验证(比如登录),并在服务器端获得了一个正确的身份,那么验证就通过了。用户对象代表了这么一个身份识别。除了身份检查外,一些页面也需要额外的权限检查来确保被验证的身份有足够的权限来访问。

  验证框架支持基于角色的验证。一个页面如果在应用的配置页面中指名了需要验证(secured),框架将确保在访问页面前用户必须被验证。如果还指定的角色,那么框架还将确保用户是属于该角色的。最后,还可以定制页面的验证过程。如果验证或者授权失败了,onAuthenticationRequired 或onAuthorizationRequired 方法就会被触发,可以在此显示错误信息或者重定向到登录页面。

  用户对象在不同的页面始终存在的,它使用了session。因此如果要使用验证框架则必须申明session类。由于用户对象保存在session中,因此你可以用它来保存一些需要在不同页面访问的数据。

  如果要使用验证框架,需要在应用的配置文件中申明一个用户类。用户类必须实现了IUser接口。框架中已经提供了一个实现了该接口的类System.Security.TUser 。

  phonebook 这个例子中说明了验证框架是如果使用的。

4.4  Form验证

  PRADO提供了一种简单的方法来进行form的验证,而如果使用传统的PHP编程方式,这个过程是非常重复而且单调的。在PRADO中有一套验证组件。这些验证组件即允许在客户端也允许在服务器端对数据进行验证,下面我们将举一个例子来说明。

  现在我们要创建一个用户注册页面。这个页面要求用户输入一个用户名和一个密码来创建新的帐号。密码要求是被输入两次以防止输入错误。另外用户名和密码都只能包含数字和数字,而且两者的长度分别要求不少于3位和6位。

  要实现这个功能,可以创建这么一个模板: 

 ...
<com:TForm>
...
Username:
<com:TTextBox ID="username" />
<com:TRequiredFieldValidator
      ControlToValidate="username"
      ErrorMessage="You must choose a username." />
<com:TRegularExpressionValidator
      ControlToValidate="username"
      RegularExpression="[\w]{3,}"
      ErrorMessage="Username must ...." />
<br/>
Password:
<com:TTextBox ID="password" TextMode="Password" />
<com:TRequiredFieldValidator
      ControlToValidate="password"
      ErrorMessage="You must choose a password." />
<com:TRegularExpressionValidator
      ControlToValidate="password"
      RegularExpression="[\w]{6,}"
      ErrorMessage="Password must ...." />
<br/>
Repeat Password:
<com:TTextBox ID="password2" TextMode="Password" />
<com:TRequiredFieldValidator
      ControlToValidate="password2"
ErrorMessage="Please re-type your password." />
<com:TCompareValidator
      ControlToValidate="password2"
      ControlToCompare="password"
      ErrorMessage="Your password entries did not match." />
<br/>
<com:TButton Text="Register" />
...
</com:TForm>
...

  上面这个模板允许页面执行用户输入的客户端验证和服务器端验证(假定浏览器支持javascript)。不再需要额外的代码了。如果验证失败的话,form是不会被提交的,而同时会显示错误信息。

  可以在模板文件中通过设置验证组件的EnableClientScript 属性来关掉客户端的验证。这时候,你可以在页面的OnLoad 事件中或者之后通过检查页面的IsValid 属性来判断验证是否通过。

4.5  缓存

  PRADO框架提供了一个缓存机制来提高PRADO应用的运行效率。对于每一种组件类型,如果它之前曾经被实例化过,那么就会有一个对应的文件存在缓存目录中。这个文件包含了被序列化的的控件实例。以后一旦需要再创建同样的组件,那么就直接通过这个缓存文件来创建。这将会大大节省组件的创建时间,因为创建组件的过程需要解析好几个XML规格文件和模板文件。

  如果要使用缓存,只需要在应用的配置文件中给的属性设置一个目录即可。这个目录必须是Web服务器可写的。使用的路径可以是绝对路径也可以是相对路径。

  如果要关闭缓存,只需要给属性赋一个空字符串即可。

  注意,如果你修改了组件的文件,那么应该包括所有的缓存文件都删掉或者移走。下一次组件创建的时候会自动重新创建的。因此在开发的时候,应该把缓存关掉。

4.6  定制 TApplication

  TApplication 类是可以被扩充的。 TApplication 有好几个方法可以被重载。比如,你可以重载 beginRequest() 方法来实现对request数据的进行一些自己需要的预处理。如果想进一步了解这些内容,可以参考PRADO 的文档。

时间: 2024-09-13 13:14:12

PHP开发利器-PRADO 1.6高级主题的相关文章

PHP开发利器-PRADO 1.6入门与安装

ado   第1章 入门 1.1  PRADO是什么? PRADO是在PHP5环境下的一个基于事件驱动和基于组件的WEB应用开发框架.使用PRADO开发WEB应用,你主要需要做的工作就是使用已有的组件(原文是"实例化已经定义好的组件",熟悉面向对象编程的开发者可能比较容易理解这句话),设置组件的属性,为控件组件的各种事件编写对应的处理函数,然后把这些组织成一个个的页面.(译者注:个人倾向于将component翻译为组件,control翻译为控件,事实上大多数场合两者没有什么区别,但是为

PHP开发利器-PRADO 1.6编程

ado|编程   第2章 用PRADO编程 现在让我们更深入的了解一下PRADO框架.这一章我们会介绍一些框架的基本概念和如何使用现有的PRADO组件来开发一个PRADO应用. 2.1  组件 根据Clemens Szyperski的说法, ``软件组件是一个具有特定接口的组合单元,可以独立存在,参与组成其它组建.'' 在PRADO中, 组件是 TComponent 或者其子类的实例.PRADO框架中已经包括了 TComponent 类,它主要实现了组件的属性和事件机制. 属性可以被认为是描述组

推荐php开发利器 快速创建web应用

近日美国"开源软件"项目Openbiz新发布了一款名为Openbiz Cubi Dev的PHP的应用开发利器,宣称可以让开发人员在3分钟内通过配置和向导完成创建一个功能完善的企业级应用程序.这是空穴来风 还是 锋芒毕露,让我们拭目以待. 上手体验:与 Openbiz的第一次接触 笔者下载了开发安装包后,发现它提供了一个可以在Windows下运行的自动部署工具.跟着官方提供的安装视频教程,很方便就安装在了本地.进入我本机的运行环境,是进一步的数据库配置向导和初始化系统向导.给人的第一感觉

Android零基础入门第13节:Android Studio配置优化,打造开发利器

原文:Android零基础入门第13节:Android Studio配置优化,打造开发利器 是不是很多同学已经有烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装运行程序都要等待很长时间,如果是在开发后期需要不停的修改代码运行看效果,这必定会影响工作效率. 有什么办法可以改善一下这些问题呢?方法是肯定会有的,接下来通过两期来从两个维度来提高效率.今天首先来优化配置我们的Android Studio开发工具,将一些使用很少但占有内存的插件屏蔽,将影响效率的地方

websocket即时通讯java SpringMVC mybatis 后台框架 集成代码生成器开发利器

A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势D 集成安全权限框架shiro  Shiro 是一个用 Java 语言

Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.2.0.1337 Edition 数据库比较工具 完全破解+使用教程 Red Gate系列之二

java myeclipse-谁有 java开发利器myeclipse全面详解 源码?

问题描述 谁有 java开发利器myeclipse全面详解 源码? 谁有 java开发利器myeclipse全面详解 源码?我已经有文档了,有源码的话,发个链接吧,感激不尽!

Knockout应用开发指南 第九章:高级应用举例

原文:Knockout应用开发指南 第九章:高级应用举例 1   Contacts editor 这个例子和微软为演示jQuery Data Linking Proposal例子提供的例子一样的提供的,我们可以看看Knockout实现是难了还是容易了. 代码量的多少不重要(尽快Knockout 的实现很简洁),重要的看起来是否容易理解且可读.查看HTML源代码,看看如何实现的view model以及绑定的.     代码: View View Code <h2>Contacts</h2&

《Http Client 官方文档》7. 高级主题

第七章 高级主题 7.1. 自定义客户端连接 在某些情况下,有必要自定义HTTP消息传输的方式来扩展HTTP参数的可使用性,以便能够处理非标准的作业. 例如,对于网络爬虫,可能需要强制HttpClient接受格式不正确的响应头,来捕捉消息的内容. 通常,插入自定义消息解析器或自定义连接实现的过程涉及几个步骤: 提供自定义的"LineParser"/"LineFormatter"接口实现类. 根据需要实现消息解析/格式化逻辑. class MyLineParser e