Model自动验证

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/


class CatModel extends Model{
protected $table = 'category';

/*
你给我一个关键数组,键->表中的列,值-->表中的值,
add()函数自动插入该行数据
*/
public function add($data) {
return $this->db->autoExecute($this->table,$data);
}


// 获取本表下面所有的数据
public function select() {
$sql = 'select cat_id,cat_name,parent_id from ' . $this->table;
return $this->db->getAll($sql);
}

// 根据主键 取出一行数据
public function find($cat_id) {
$sql = 'select * from category where cat_id=' . $cat_id;
return $this->db->getRow($sql);
}

/*
getCatTree
pram: int $id
return $id栏目的子孙树
*/
public function getCatTree($arr,$id = 0,$lev=0) {
$tree = array();

foreach($arr as $v) {
if($v['parent_id'] == $id) {
$v['lev'] = $lev;
$tree[] = $v;

$tree = array_merge($tree,$this->getCatTree($arr,$v['cat_id'],$lev+1));
}
}

return $tree;
}

/*
parm: int $id
return $id栏目下的子栏目
*/
public function getSon($id) {
$sql = 'select cat_id,cat_name,parent_id from ' . $this->table . ' where parent_id=' . $id;

return $this->db->getAll($sql);
}

/*
parm: int $id
return array $id栏目的家谱树
*/
public function getTree($id=0) {
$tree = array();
$cats = $this->select();

while($id>0) {
foreach($cats as $v) {
if($v['cat_id'] == $id) {
$tree[] = $v;

$id = $v['parent_id'];
break;
}
}
}

return $tree;

}

// 删除栏目
public function delete($cat_id=0) {
$sql = 'delete from ' . $this->table . ' where cat_id=' . $cat_id;
$this->db->query($sql);

return $this->db->affected_rows();
}

//
public function update($data,$cat_id=0) {
$this->db->autoExecute($this->table,$data,'update',' where cat_id=' . $cat_id);
return $this->db->affected_rows();
}
}

 

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/


defined('ACC')||exit('ACC Denied');

class GoodsModel extends Model{
protected $table = 'goods';
protected $pk = 'goods_id';
protected $fields = array('goods_id','goods_sn','cat_id','brand_id','goods_name','shop_price','market_price','goods_number','click_count','goods_weight','goods_brief','goods_desc','thumb_img','goods_img','ori_img','is_on_sale','is_delete','is_best','is_new','is_hot','add_time','last_update');

protected $_auto = array(
array('is_hot','value',0),
array('is_new','value',0),
array('is_best','value',0),
array('add_time','function','time')
);

protected $_valid = array(
array('goods_name',1,'必须有商品名','require'),
array('cat_id',1,'栏目id必须是整型值','number'),
array('is_new',0,'is_new只能是0或1','in','0,1'),
array('goods_brief',2,'商品简介就在10到100字符','length','10,100')
);


/*
作用:把商品放到回收站,即is_delete字段置为1
parm int id
return bool
*/
public function trash($id) {
return $this->update(array('is_delete'=>1),$id);
}


public function getGoods() {
$sql = 'select * from goods where is_delete=0';
return $this->db->getAll($sql);
}

public function getTrash() {
$sql = 'select * from goods where is_delete=1';
return $this->db->getAll($sql);
}
}

 

 

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
defined('ACC')||exit('ACC Denied');
class Model {
protected $table = NULL; // 是model所控制的表
protected $db = NULL; // 是引入的mysql对象

protected $pk = '';
protected $fields = array();
protected $_auto = array();
protected $_valid = array();
protected $error = array();

public function __construct() {
$this->db = mysql::getIns();
}

public function table($table) {
$this->table = $table;
}


/*
自动过滤:
负责把传来的数组
清除掉不用的单元
留下与表的字段对应的单元
思路:
循环数组,分别判断其key,是否是表的字段
自然,要先有表的字段.

表的字段可以desc表名来分析
也可以手动写好
以tp为例,两者都行.

先手动写
*/
public function _facade($array=array()) {
$data = array();
foreach($array as $k=>$v) {
if(in_array($k,$this->fields)) { // 判断$k是否是表的字段
$data[$k] = $v;
}
}

return $data;
}


/*
自动填充
负责把表中需要值,而$_POST又没传的字段,赋上值
比如 $_POST里没有add_time,即商品时间,
则自动把time()的返回值赋过来
*/
public function _autoFill($data) {
foreach($this->_auto as $k=>$v) {
if(!array_key_exists($v[0],$data)) {
switch($v[1]) {
case 'value':
$data[$v[0]] = $v[2];
break;

case 'function':
$data[$v[0]] = call_user_func($v[2]);
break;
}
}
}

return $data;
}


/*
格式 $this->_valid = array(
array('验证的字段名',0/1/2(验证场景),'报错提示','require/in(某几种情况)/between(范围)/length(某个范围)','参数')
);

array('goods_name',1,'必须有商品名','requird'),
array('cat_id',1,'栏目id必须是整型值','number'),
array('is_new',0,'in_new只能是0或1','in','0,1')
array('goods_breif',2,'商品简介就在10到100字符','length','10,100')

*/
public function _validate($data) {
if(empty($this->_valid)) {
return true;
}

$this->error = array();

foreach($this->_valid as $k=>$v) {
switch($v[1]) {
case 1:
if(!isset($data[$v[0]])) {
$this->error[] = $v[2];
return false;
}

if(!$this->check($data[$v[0]],$v[3])) {
$this->error[] = $v[2];
return false;
}
break;
case 0:
if(isset($data[$v[0]])) {
if(!$this->check($data[$v[0]],$v[3],$v[4])) {
$this->error[] = $v[2];
return false;
}
}
break;
case 2:
if(isset($data[$v[0]]) && !empty($data[$v[0]])) {
if(!$this->check($data[$v[0]],$v[3],$v[4])) {
$this->error[] = $v[2];
return false;
}
}
}
}

return true;

}

public function getErr(){
return $this->error;
}

protected function check($value,$rule='',$parm='') {
switch($rule) {
case 'require':
return !empty($value);

case 'number':
return is_numeric($value);

case 'in':
$tmp = explode(',',$parm);
return in_array($value,$tmp);
case 'between':
list($min,$max) = explode(',',$parm);
return $value >= $min && $value <= $max;
case 'length':
list($min,$max) = explode(',',$parm);
return strlen($value) >= $min && strlen($value) <= $max;

default:
return false;
}
}

/*
在model父类里,写最基本的增删改查操作
*/

/*
parm array $data
return bool
*/
public function add($data) {
return $this->db->autoExecute($this->table,$data);
}

/*
parm int $id 主键
return int 影响的行数
*/
public function delete($id) {
$sql = 'delete from ' .$this->table . ' where ' . $this->pk . '=' .$id;
if($this->db->query($sql)) {
return $this->db->affected_rows();
} else {
return false;
}
}


/*
parm array $data
parm int $id
return int 影响行数
*/
public function update($data,$id) {
$rs = $this->db->autoExecute($this->table,$data,'update',' where '.$this->pk.'='.$id);
if($rs) {
return $this->db->affected_rows();
} else {
return false;
}
}


/*
return Array
*/
public function select() {
$sql = 'select * from ' . $this->table;
return $this->db->getAll($sql);
}


/*
parm int $id
return Array
*/

public function find($id) {
$sql = 'select * from ' . $this->table . ' where ' . $this->pk . '=' . $id;
return $this->db->getRow($sql);
}

}

 

完整文件下载

posted on 2012-12-03 16:35  besile  阅读(215)  评论(0编辑  收藏  举报