ThinkPHP框架总结五

来源:互联网 发布:德国哪个公司办网络好 编辑:程序博客网 时间:2024/05/18 13:10
一.字段映射
当我们前端页面提交信息时input标签中的name名字起的跟我们数据表里的字段名不一致的时候可以使用这个来解决这个问题
1.第一种方法 $_map
先要在Model文件夹中创建一个相对应的模型类在类中声明一个受保护的属性
里面写前端页面传过来的name名后面对应数据表中的字段名
例:
protected $_map = array(
        'name' => 'user_name',
        'pass'=> 'password',
    );
然后在控制器中读取前端发来的数据
例:
public function member(){
        if(IS_POST){
            $member=D('member');
            dump($member->create());
        }else{
            $this->assign('title','主页');
            $this->display('member');
        }
这样就可以解决name名和数据表名不一样的问题


2.第二种方法 parseFieldsMap 方法
拿到数据的时候直接通过这个方法来进行字段映射
例:
 if(IS_POST){
         $member=D('member');
         dump($member->parseFieldsMap($member->create()));
        }else{
            $this->assign('title','主页');
            $this->display('member1');
        }


二.自动验证 $_validate
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间],如果是回调函数验证这后面还可以继续写一个数组进行判断)
验证字段 (必须)
需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。
有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的。
如果定义了字段映射的话,这里的验证字段名称应该是实际的数据表字段而不是表单字段。


验证规则 (必须)
要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,系统还内置了一些常用正则验证的规则,
可以直接作为验证规则使用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。


提示信息 (必须)
用于验证失败后的提示信息定义


验证条件 (可选)
包含下面几种情况:
self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
self::MUST_VALIDATE 或者1 必须验证
self::VALUE_VALIDATE或者2 值不为空的时候验证


附加规则 (可选)
regex  正则验证,定义的验证规则是一个正则表达式(默认)
function  函数验证,定义的验证规则是一个函数名 把函数写到自己目录下的Common下写个function文件
callback  方法验证,定义的验证规则是当前模型类的一个方法
confirm  验证表单中的两个字段是否相同,定义的验证规则是一个字段名
equal  验证是否等于某个值,该值由前面的验证规则定义
notequal  验证是否不等于某个值,该值由前面的验证规则定义(3.1.2版本新增)
in  验证是否在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串
notin  验证是否不在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串(3.1.2版本新增)
length  验证长度,定义的验证规则可以是一个数字(表示固定长度)或者数字范围(例如3,12 表示长度从3到12的范围)
between  验证范围,定义的验证规则表示范围,可以使用字符串或者数组,例如1,31或者array(1,31)
notbetween  验证不在某个范围,定义的验证规则表示范围,可以使用字符串或者数组(3.1.2版本新增)
expire  验证是否在有效期,定义的验证规则表示时间范围,可以到时间
ip_allow  验证IP是否允许,定义的验证规则表示允许的IP地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
ip_deny  验证IP是否禁止,定义的验证规则表示禁止的ip地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
unique  验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值,当表单数据中包含主键字段时unique不可用于判断主键字段本身


验证时间 (可选)
self::MODEL_INSERT或者1新增数据时候验证
self::MODEL_UPDATE或者2编辑数据时候验证
self::MODEL_BOTH或者3全部情况下验证(默认)


getError()  返回的错误信息(字符串)
静态定义方式因为必须定义模型类,所以只能用D函数实例化模型
$_validate 属性名必须以这个命名 而且是一个受保护的


静态定义
在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义


例:也要在Model中建一个类,写一个受保护的属性,把这些规则写在这里
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]);


protected $_validate = array(
       // array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
        //验证规则 (必须)require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字
        array('user_name','require','用户名不能为空'),
        //array('user_name','email','用户名必须是邮箱')
        //自己写正则验证规则
        //array('user_name','/^\d{3,8}$/','用户名必须3到8个数字',0,'regex',3),
        //附加规则
        //array('password','pwd','两次密码不一样',0,'confirm',3)
        //array('password','123456','密码不能为123456',0,'notequal',3),
        //array('password',array('1234'),'密码必须为1234',0,'in',3)
        //array('password','50,100','密码必须是50到100之间',0,'between',3)
       // array('user_name','','用户名已存在',0,'unique',3)
        //使用回调函数来验证
       array('user_name','chkUser','用户名必须3到8个字符之间',0,'callback',3,array('3','8'))
    );
    protected function chkUser($val,$min,$max){
          if(mb_strlen($val)<$min ||mb_strlen($val)>$max){
              return false;
          }else{
              return true;
          }
    }


三.自动完成 $_auto
用来完成数据自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理
规则定义:
静态方式:在模型类里面通过$_auto属性定义处理规则。
动态方式:使用模型类的auto方法动态创建自动处理规则在控制器中创建。


array(完成字段1,完成规则,[完成时间,附加规则]) 完成规则由附加规则决定的
完成字段(必须)
需要进行处理的数据表实际字段名称。


完成规则(必须)
需要处理的规则,配合附加规则完成。


完成时间(可选)
设置自动完成的时间,包括:
self::MODEL_INSERT或者1  新增数据的时候处理(默认)
self::MODEL_UPDATE或者2  更新数据的时候处理
self::MODEL_BOTH或者3  所有情况都进行处理


附加规则
function  使用函数,表示填充的内容是一个函数名
callback  回调方法 ,表示填充的内容是一个当前模型的方法
field  用其它字段填充,表示填充的内容是一个其他字段的值
string  字符串(默认方式)
ignore  为空则忽略(3.1.2新增)
如果进行更新的时候想对哪些字段不更新,就可以使用这个关键字ignore声明那个字段名就可以忽略掉
例:
 protected $_auto=array(
         //array(完成字段1,完成规则,[完成时间,附加规则])
         array('money','1000'),
         array('password','md5',3,'function'),
         array('login_ip','getRemoteIp',3,'callback'),
     );
     //回调函数
     protected function getRemoteIp(){
         return $_SERVER['REMOTE_ADDR'];
     }


四.视图
1.模板定义
每个模块的模板文件是独立的,为了对模板文件更加有效的管理,ThinkPHP对模板文件进行目录划分,
默认的模板文件定义规则是:
视图目录/[模板主题/]控制器名/操作名+模板后缀
默认的视图目录是模块的View目录(模块可以有多个视图文件目录,这取决于你的应用需要),
框架的默认视图文件后缀是 .html 。 新版模板主题默认是空(表示不启用模板主题功能)。


在每个模板主题下面,是以模块下面的控制器名为目录,然后是每个控制器的具体操作模板文件


如果你的默认视图层不是View,例如:
'DEFAULT_V_LAYER' => 'Template', // 设置默认的视图层名称


模板文件的默认后缀的情况是 .html ,也可以通过 TMPL_TEMPLATE_SUFFIX 来配置成其他的
'TMPL_TEMPLATE_SUFFIX'=>'.tpl'


如果觉得目录结构太深,可以通过设置 TMPL_FILE_DEPR 参数来配置简化模板的目录层次
'TMPL_FILE_DEPR'=>'_'


2.模板主题
一个模块如果需要支持多套模板文件的话,就可以使用模板主题功能,默认情况下,没有开启模板主题功能,
需要在View文件夹下创建一个default文件夹,把你的各种 模板 主题放在那里,如果想换哪种主题风格
把配置文件中的'DEFAULT_THEME' => 'default' 值改成相对应的文件名就OK了
如果需要开启:
设置默认的模板主题 'DEFAULT_THEME' => 'default'
采用模板主题后,需要在视图目录下面创建对应的主题目录.模板文件只是多了一层目录:
例:View/default/User/add.html // 启用模板主题之后


只对一个页面生成主题话,就在控制器中使用这个方法:theme()


3.模板赋值
assign('name',$value)  给模板赋值


4.渲染模板
display('[模板文件]'[,'字符编码'][,'输出类型'])模板文件的写法支持下面几种:
不带任何参数 自动定位当前操作的模板文件
[模块@][控制器:][操作] 常用写法,支持跨模块 模板主题可以和theme方法配合
完整的模板文件名 直接使用完整的模板文件名(包括模板后缀)
原创粉丝点击