趁现在炖肉的呢,抽个空赶紧写一篇,每天忙死。
Validator 组件顾名思义就是表单验证组件,负责检验各种表单输入是否符合规则。由2个类组成,一个是LtValidator,是专门负责验证的,LtValidatorDtd 是用来定义各种验证规则和返回提示的
LtValidator 的公共方法除了 init() 初始化的组件外,就一个 validate 方法。
Validator 组件支持10种验证规则:
ban
通常用来验证字符串中不包含指定字符的,例如用户名不能包含xxx
输入只支持正则表达式,需要用//引起来.具体可以参考php手册里的preg_match函数
mask
通常用来验证字符串中包含指定字符的,例如用户名只能以字母数字开头
输入只支持正则表达式,需要用//引起来.具体可以参考php手册里的preg_match函数
equal_to
通常用来验证两个值是否恒等,例如输入的两次密码是否相同
输入可以是数字也可以是字符串
max_length
通常用来验证输入的字符串是否超过了指定长度,例如用户名最多只能8个字母
输入只能是数字
min_length
通常用来验证输入的字符串是否少于指定长度,例如用户名最少4个字母
输入只能是数字
max_value
通常用来验证输入的数值是否大于指定的值,例如年龄最大为99岁
输入只能是数字
min_value
通常用来验证输入的数值是否小于指定的值,例如年龄最小为10岁
输入只能是数字
max_selected
通常用来验证选择的最多个数是否大于指定的值,例如最多只能选3个
输入只能是数字
min_selected
通常用来验证选择的最少个数是否小于指定的值,例如最少只能选1个
输入只能是数字
required
通常用来验证该验证选项是否为必填,例如用户名不能为空
输入只能是布尔类型,默认是false
Validator 支持用配置文件来定义错误信息,如果你没有定义默认的错误信息,那通过 LtValidatorDtd 也可以来定义验证错误信息,好了,说的估计有点晕头转向了,还是看例子比较给力。
先定义配置文件,validator.conf.php
文件内容如下:
<?php
$config['validator.error_messages'] = array('ban' => '%s 内容中含有禁用词',
'mask' => '%s 不符合验证规范',
'max_length' => '%s 超出最大字符数 %s',
'min_length' => '%s 小于最小字符数 %s',
'max_value' => '%s 大于最大值 %s',
'min_value' => '%s 小于了最小值 %s',
'max_selected' => '%s 选项过多',
'min_selected' => '%s 选项过少',
'required' => '%s 为空',
'equal_to' => '%s 不等于 %s',
);
上面的配置文件你可以根据自己的验证内容进行更改。总之定义10个类型的出错显示语句就行。
定义完了配置文件,就需要了解下 Validator 的验证规则
我给出一个我们验证用户注册的常用例子
$this->dtds['Title']=new LtValidatorDtd("用户名称", array("max_length" => 20,"required" => true));
$this->dtds['Pwd']=new LtValidatorDtd("用户密码", array("max_length" => 20, "required" => true));
$this->dtds['Pwd2']=new LtValidatorDtd("重复用户密码", array("equal_to" =>$this->context->post('Pwd'),"required" => true));
$this->dtds['Roles']=new LtValidatorDtd("用户角色", array("min_selected" =>1));
上面的语句是在LotusPhp MVC模式下的运行范例,如果不启用 LotusPhp MVC模式 ,那就是下面这样的写法了:
$dtd['username'] = new LtValidatorDtd("用户名",
array("max_length" => 16, "min_length" => 4, "required" => true),
array( "max_length" => "%s最多只能有%s个字符",
"min_length" => "%s最少必须有%s个字符",
"required" => "%s不能为空"
) );
$dtd['password'] = new LtValidatorDtd("密码",
array(
"max_length" => 20,
"min_length" => 3,
"required" => true
),
array(
"max_length" => "%s最多只能有%s个字符",
"min_length" => "%s最少必须有%s个字符",
"required" => "%s不能为空"
) );
$dtd['password_confirm'] = new LtValidatorDtd("验证密码",
array(
"equal_to" => $_POST['password']
),
array(
"equal_to" => "两次输入的密码不一致"
) );
$dtd['email'] = new LtValidatorDtd("Email",
array(
"required" => true,
"mask" => "/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/",
),
array(
"required" => "%s不能为空",
"mask" => "%s 格式不正确"
) );
不运行 LotusPhp的 MVC 模式,不是我们讲的重点,稍带提示下。
看过上面的两个定义验证规则的范例,基本上多数人能看出来验证规则的定义方法
$dtd['表单名称'] = new LtValidatorDtd("表单名称表述",
array(
"验证类别1" => '验证类别的值1',
"验证类别2" => '验证类别的值2',
...
),
array(
"验证类别1" => "出错提示语句1",
"验证类别2" => "出错提示语句2",
...
) );
如果定义了配置文件,而且不准备定义出错提示语句,而是用默认的出错提示语句,第二个数据可以为空
$dtd['表单名称'] =
Session 是服务端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session文件,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时(前提会话没有结束),其他web资源再从用户的各自session中取出数据为用户服务。
Session 是最重要的用户行为跟踪技术(防止用户非法登录/验证码等)。
默认情况下session文件被保存在C:/Windows/temp 目录下。
1、创建session
<?php
//创建session
//初始化session
session_start();
//保存数据
$_SESSION['name']="pawm";
//session 文件中可以保存dobule,integer,string,bool, array,object
//保存bool integer
$_SESSION['age']=20;
$_SESSION['isBoy']=true;
$_SESSION['arr']=array("北京","张三","xiaoming");
//保存对象到session 中
class Dog{
private $name;
private $age;
private $intro;
public function __construct($name,$age,$intro){
$this->name=$name;
$this->age=$age;
$this->intro=$intro;
}
}
$dog1=new Dog("狗狗",5,"很听话的狗");
$_SESSION['dog1']=$dog1;
echo "保存成功";
?>
要点:
1、保存的数据格式:name|s:4:"pawm";age|i:20;isBoy|b:1;
name:就是key
s:表示数据类型
4:表示数据大小
2、session 中可以保存的数据类型是:dobule,integer,string,bool, array,object
本文链接
//被察者抽象类
class Observed implements SplSubject{
protected $_name;
protected $_observers;
//实例化,生成一个观察者对象
public function __construct(){
$this->_observers = new SplObjectStorage();
}
// 添加观察者对象
public function attach(SplObserver $observer){
$this->_observers->attach($observer);
}
//删除观者对象
public function detach(SplObserver $observer){
$this->_observers->detach($observer);
}
//通知消息
public function notify(){
foreach($this->_observers as $observer){
$observer->showMessage($this);
}
}
//普通方法: 设置值
public function setName($name){
$this->_name = $name;
$this->notify();
}
//普通方法: 获取值
public function getName(){
return $this->_name;
}
//普通方法:设置年龄
public function setAge($age){
$this->age = $age;
foreach($this->_observers as $observer){
$observer->showAge($this->_name,$this->age);
}
}
}
// 观察者抽象类
class Observer implements SplObserver{
//显示消息提示
public function showMessage(SplSubject $obj){
$user = $obj->getName();
if($user==='admin'){
echo '您好, ',$user,'欢迎您进入管理后台<br/>';
}else{
echo "你好, '$user' 你已经被添加到了用户列表<br/>";
}
}
//这是继承父类的抽象方法
public function update(SplSubject $subject) {}
//显示个人年龄
public function showAge($name,$age){
echo "<script>alert('$name 的年龄是: $age')</script>";
}
}
$subject = new Observed(); //生成一个被观察者对象
$observer = new Observer(); //生成一个观察者对象
$subject->attach($observer);//把观察者传入到被观察中去
$subject->setName('张三'); //调用 setName 方法
/*
* 通过面的 setName 就会调用 $this->notify();
* 通过调用 $this->notify()就会调用 $observer->showMessage($this)方法,
* 即每个观察者对象的 showMessage($obj)方法;
*/
$subject->setName('admin');
$subject->setAge(24);
本文链接