分享
 
 
 

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

王朝php·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

第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 的文档。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有