---------------------------
——————————————TP 商城 2 goods栏目————————
------------------------------
namespace Home/Controller ;
use Think/Controller ;
use Think/Controller ;
-------------------------------
简化重复的代码 在controller 里边写;
因为每次都要先实例化一个model构造函数
因为每次都要先实例化一个model构造函数
$model = null ;
public function __construct(){
parent :: __construct(); //父类的构造方法
return $this -> model = new \Home\GoodsMolde();
}
public function __construct(){
parent :: __construct(); //父类的构造方法
return $this -> model = new \Home\GoodsMolde();
}
--------------------------------
自动XXXX:
自动XXXX:
====来源 tp手册 数据创建 create ;
---------
在 model 下定义自动规则 实例化 这个类的时候 自动生效
验证数据的合法性 if ... else ... if ... else ...
简化 用自动验证:
在 model 下定义自动规则 实例化 这个类的时候 自动生效
验证数据的合法性 if ... else ... if ... else ...
简化 用自动验证:
//controller 中 用create方法才能有自动验证前提
//create() 的 过程 会检测数据的(合法性 --自动验证);
//create 自动根据表单数据创建数据对象 数据字段多的情况下尤为明显
//create() 的 过程 会检测数据的(合法性 --自动验证);
//create 自动根据表单数据创建数据对象 数据字段多的情况下尤为明显
$this->model ->create();
$this->model->add();
$this->model->add();
if(!$this->model->create()) {
echo $this->model->getError();
}else{
$this->model->add();
}
echo $this->model->getError();
}else{
$this->model->add();
}
//getError();方法是获取自动验证中自己写的哪个出错信息的
// array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
//这里边封装的错误提示
// array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
//这里边封装的错误提示
————————自动验证 在哪里验?——————————
//在model里 实例化调用的
protected $_vailable ();
只有业务逻辑才是人做的 其他的代码话!!
--------------------------------
————————————————————————————————
//自动验证 写在GoodsModel 里边
--------------------------------
————————————————————————————————
//自动验证 写在GoodsModel 里边
protected $_validate = array(
// array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
array('goods_name' , '5,16' , '商品名称应5-16字符',1, 'length',3),
array('is_best' , '0,1' , '精品只能0,1',0,'in',3), /? 0 存在字段则验证 为什么?checkbox特性/
array('goods_sn' , '','货号不能重复',1,'unique' , 3),
array('cat_id' , 'ckc','栏目不存在',1,'callback' , 3),
);
// array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
array('goods_name' , '5,16' , '商品名称应5-16字符',1, 'length',3),
array('is_best' , '0,1' , '精品只能0,1',0,'in',3), /? 0 存在字段则验证 为什么?checkbox特性/
array('goods_sn' , '','货号不能重复',1,'unique' , 3),
array('cat_id' , 'ckc','栏目不存在',1,'callback' , 3),
);
protected function ckc() {
$cat = D('Home/Cat');
return $cat->find(I('post.cat_id')) ? true : false;
}
//方法:回调方法 和其他的一样都是 return 的 true / false 以便判断是不是能通过!
//判断自己特殊的业务逻辑规则
$cat = D('Home/Cat');
return $cat->find(I('post.cat_id')) ? true : false;
}
//方法:回调方法 和其他的一样都是 return 的 true / false 以便判断是不是能通过!
//判断自己特殊的业务逻辑规则
注释:
1.checkbox 标签的规则 如果勾选则传过去 如果没勾选 则没有这个字段( 0 存在字段则验证)
2.equal 验证是否等于某个值,该值由前面的验证规则定义
3.array('is_best' , '1' , '精品只能0,1',0,'equal',3), 改进后
1.checkbox 标签的规则 如果勾选则传过去 如果没勾选 则没有这个字段( 0 存在字段则验证)
2.equal 验证是否等于某个值,该值由前面的验证规则定义
3.array('is_best' , '1' , '精品只能0,1',0,'equal',3), 改进后
unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值,
当表单数据中包含主键字段时unique不可用于判断主键字段本身
--------------------------------
验证条件
包含下面几种情况:0,1,2
当表单数据中包含主键字段时unique不可用于判断主键字段本身
--------------------------------
验证条件
包含下面几种情况:0,1,2
self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
self::MUST_VALIDATE 或者1 必须验证
self::VALUE_VALIDATE或者2 值不为空的时候验证
————————————————————————————————
————————————————————————————————
self::MUST_VALIDATE 或者1 必须验证
self::VALUE_VALIDATE或者2 值不为空的时候验证
————————————————————————————————
————————————————————————————————
//自动完成
protected $_auto = array(
// array(完成字段1,完成规则,[完成条件,附加规则]),
array('add_time','time',1,'function'),
array('last_update' , 'time' , 2 , 'function'),
);
// array(完成字段1,完成规则,[完成条件,附加规则]),
array('add_time','time',1,'function'),
array('last_update' , 'time' , 2 , 'function'),
);
例如上次修改时间啊。。
表单中没有明确传过来就导致这个字段为空
因此需要自动填充$_auto
表单中没有明确传过来就导致这个字段为空
因此需要自动填充$_auto
callback 和 function 区别
--------------------------------
————————————————————————————————
--------------------------------
————————————————————————————————
自动过滤
过滤不存在的字段 代码的层面上
例如 firebug 里边里边 新加的标签 tp 有自带的程序的基本过滤
例如 firebug 里边里边 新加的标签 tp 有自带的程序的基本过滤
业务逻辑的层面上
过滤不允许修改的 如 注册时的身份证 自动过滤掉 再修改的时候 你没有权限
限制你 修改的字段 不允许你修改
过滤不允许修改的 如 注册时的身份证 自动过滤掉 再修改的时候 你没有权限
限制你 修改的字段 不允许你修改
------tp手册 表单合法性检测 $insertfield $updatefield
限制你可以新增的 和可以修改的字段
insertFields 和 updateFields属性的设置采用字符串(逗号分割多个字段)或者数组的方式。
protected $insertFields = 'goods_sn,cat_id,brand_id,goods_name ... ... ';
protected $updateFields = array('nickname','email');
protected $updateFields = array('nickname','email');
--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------
--