我们知道struts中将表单的数据封装成为一个FORMBEAN ,并且能够使用validate的方法对表单数据进行服务端验证。我们能不能在php中实现呢,借助我们可爱的魔术函数当然可以实现,而且实现的更为简单。
代码如下:
<?php
/**
* 定义的虚拟FORM类
*/
class Form {
private $request;
/**
* 初始化FORM类
*/
public function Form() {
$this->request = $_POST;
}
/**
* 获取request
* @return Array
*/
public function getRequest() {
return $this->request;
}
/**
* 重设request
* @return array
*/
public function reset() {
foreach ($this->request AS $key => $value) {
$this->request[$key] = "";
}
return $this->request;
}
/**
* 转换函数名
* @param String $method
* @param String $type
* @return String
*/
private function lw_first ($method = "", $type = "get") {
$method = substr($method, strlen($type));
$first = substr($method, 0, 1);
return strtolower($first) . substr($method, 1);
}
/**
* 魔术函数
* @param mix
*/
public function __get($property) {
if (isset($this->request[$property])) {
return $this->request[$property];
}
return "";
}
/**
* 魔术函数
* @param mix
* @param array
*/
public function __set($property, $value) {
$this->request[$property] = $value;
}
/**
* 魔术函数
* @param String $method
* @param Array $arguments
*/
public function __call($method, $arguments) {
if (false !== strpos($method, "get")) {
$value = $this->lw_first($method, "get");
return $this->$value;
} else {
$name = $this->lw_first($method, "set");
$this->$name = (!empty($arguments)) ? $arguments[0] : "";
}
}
/**
* 析构函数
*/
public function __destruct() {
unset($this->request);
}
}
?>
调用方法
我们在控制器中,实例化这个form, 就可以通过,$form->getUsername();这样的方法访问参数了$_POST['username']
我们只要实现这个抽象类。并且实现validate()自己的方法 就可以把所有的请求封装成form,然后由控制器调用这个form的validate()方法进行服务端验证。