Blogger Information
Blog 42
fans 3
comment 2
visits 93405
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
TP框架中的M、D、C、I、A、S方法
Whitney的博客
Original
2246 people have browsed it

TP框架中的M、D、C、I、A、S方法

M方法

M实例化参数是数据库的表名

使用M方法实例化$User = M(‘User’);

和用法$User = new /Think/Model (‘User’);等效

执行其他的数据操作$User->select();

M方法也支持跨库操作

使用M方法实例化,操作db_name中的ot_user表$User = M(‘db_name.User’,’ot_’)

执行其他的数据库操作$User->select();

M方法的参数和/Think/Model的参数是一样的,所以我们可以这样操作:

$New = M(‘new’,’think_’,$connection);

等效于:

$New = new /Think/Model(‘new’,’think_’,$connection);

M方法实例化的时候,默认的是直接实例化/Think/Model类,如果要实例化其他的公共模型类,可以使用下面:

$User = M(‘/Home/Model/CommonModel:User’,’think_’,’db_config’);

相当于:

$User = new /Home/Model/CommonModel(‘User’,’think_’,’db_config’);

实例化基础模型类(Model)

在没有定义任何模型的时候,可以使用下面的操作,这种方法简单高效,但是确定就是没有自定义的模型类,无法写入相关的逻辑。只能完成基本的CURD操作。如果你的模型类中有自己的业务逻辑,是无法使用M方法的。

实例化User模型$User = new Model(‘User’);

或者使用M()快捷方法实例化,和上面的方法时等效的$User = M(‘User’);

//执行其他的数据操作$User->select();

实例化其他模型类

第一种因为没有模型类的定义,很难封装一些额外的逻辑方法。如果只是需要扩展一些通用的逻辑,可以尝试下面的方法

$User = new CommonModel(‘User’,’think_’,’db_config’);

第三个使用M方法

$User = M(‘CommonModel:User’,’think_’,’db_config’);

M方法默认是实例化model类

 

D方法

D实例化的是你自己在Model文件夹下面建立的模型文件

D就是在你没有定义模型的时候,系统自动帮你定义一个模型,这样才能进行简单的数据输入或者输出。

每一个Action文件都应该对应Model文件的,如果你定义了Model的话,

如:$Form = D(‘User’)就可以改成$Form = new UserModel();(User是指你的模型文件名)

$User = D(‘User’);

相当于:

$User = new /Home/Model/UserModel();

//执行操作$User->select();

如果Home/Model/UserModel不存在的话,就会尝试实例化公共模型下的/Common/Model/userMode类。

D方法的参数就是实例化的名称,并且和模型类的大小写的定义是一致的。


参数实例化的模型文件(假设当前模块为Home)
User对应的模型类文件的 /Home/Model/UserModel.class.php
UserType对应的模型类文件的 /Home/Model/UserTypeModel.class.php




如果要是在Linux下,要注意大小写

D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化系统的/Think/Model基类,同时对于已实例化的模型,不会重复去实例化,

D方法还可以跨模块调用,需要使用:

//实例化Admin的User模型D(‘Admin/User’);

//实例化Extend扩展命名空间下的Info模型D(‘Extend://Editor/Info’):

注意:跨模块实例化模型类的时候,不支持自动加载公共模块的模型类。

 

C方法

定义了配置文件之后,可以使用系统提供的C方法来读取已有额配置

获取已经设置的参数值:C(‘参数名称’)

$model = C(‘URL_MODEL’);//尽量使用大写

如果URL_MODEL尚未存在设置,则返回NULL

因为配置参数是全局有效的,因此C方法可以在任何地方读取任何配置,即使某个设置参数以及生效过期了

 

A方法

如果需要跨控制机调用的话,可以单独实例化

//实例化Home模块的User控制器$User = new /Home/Controller/UserController();

//实例化Admin模块的blog控制器$Blog = new /Admin/Controller/BlogController();

上面的代码是不是很多,这里提供了一个快捷调用方法A

简化后如下

//假设当前模块是Home模块

$User = A(‘User’);

$Blog = A(‘Admin/Blog’);

默认情况下,A方法实例化的是默认控制器(Controller),如果你要实例化其他的分层控制器的话,可以使用

//假设当前模块是Home模块

//实例化Event控制器

$User = A(‘User’); 等效于:  new /Home/Event/UserEvent();

$Blog = A(‘Admin/Blog’,’Event’) 等效于 new /Admin/Event/BlogEvent();

 

A方法

在web开发过程中,我们经常要获取系统变量或者用户提交的数据,这些数据处理不好就会引起安全隐患,所以tp给我们提供了一个变量获取功能。

我们先看下传统获取方式:

$id = $_GET[‘id’];

$name = $_POST[‘name’];

$value = $_SESSION[‘value’];

$name = $_COOKIE[‘name’];

传统获取方法没有同意的安全机制,后期调整比较麻烦,更好的方式是在框架中统一使用I函数进行变量获取和过滤

I方法时TP用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:

I(‘变量类型.变量名/修饰符’,[‘默认值’],[‘过滤方法或正则’],[‘额外数据源’])

变量类型是指请求方式或者输入类型


变量类型

   

含义

   



Get

   

获取get参数

   



Post

   

获取post参数

   



Param

   

自动判断请求类型获取GET/POST/PUT参数

   



Request

   

获取request参数

   



Put

   

获取put参数

   



Session

   

获取$_SESSION参数

   



Cookie

   

获取$_COOKIE参数

   



Server

   

获取$_SERVER参数

   



Globals

   

获取$_GLOBAL参数

   



Path

   

获取PATHINFO模式的URL参数

   



Data

   

获取其他类型的参数,需要配合额外数据源参数

   


注意:变量类型不区分大小写,变量名严格区分大小写。默认值和过滤方法均属于可选参数

下面是I方法范例使用:

echo I(‘get.id’);//相当于$_GET[‘id’]

支持默认值:

Echo I(‘get.id’,0)//如果不存在$_GET[‘id’] 则返回0

采用方法过滤:

Echo I(‘get.name’,’’,’htmlspecialchars’);

//采用htmlspecialchars方法对$_GET[‘name’]进行过滤,如果不存在则返回空字符串

支持直接获取整个变量值

I(‘get.’)

用同样的方式可以获取post或者其他输入类型的变量

Param变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如:

Echo I(‘param.id’)

如果当前请求类型是GET,那么等效于$_GET[‘id’],如果当前请求类型是POST或者是PUT,那么相当于获取$_POST[‘id’]或者$_PUT[‘id’].

由于param类型是I函数默认获取的变量类型,因此事实上param变量类型的写法可以简化为:I(‘id’)

Path类型变量可以用于获取URL参数(必须是pathinfo模式参数有效,无论是get还是post方式都有效),例如:

当前访问地址为 http://serverName/index.php/New/2013/06/01

echo I(‘path.1’)//输出2013

echo I(‘path.2’)//输出06

data类型变量可以用于获取不支持的变量类型额读取,例如:

I(‘data.file1’,‘’,‘’,$_FILES);

变量过滤

如果你没有在调用I函数的时候指定过滤方法的话,系统会采用默认的过滤机制(由DEFAULT_FILTER配置),事实上,该参数的默认设置是:

//系统默认的变量过滤机制 ‘DEFAULT_FLITER’=>’htmlspecialchars’

也就是说,I方法的所有获取变量如果没有设置过滤方法的话都会进行htmlspecialchars过滤,那么:

I(‘get.name’)等同于htmlspecialchars($_GET[‘name’])

同样,该参数也可以设置支持多个过滤,例如:

‘DEFAULT_FLITER’=>’strip_tags,htmlspecialchars’

设置后,我们在使用

I(‘get.name’)等同于htmlspecialchars(strip_tags($_GET[‘name’]))

如果我们在使用I方法的时候 指定了过滤方法,那么就会忽略DEFAULT_FLITER的设置,例如:

I(‘get.name’,’’,’strip_tags’); 等价于 strip_tags($_GET[‘name’])

I方法的第三个参数如果传入函数名,则表示调用该函数对变量进行过滤并返回(在变量是数组的情况下自动使用array_map进行过滤处理),否则会调用PHP内心hi额fliter_var方法进行过滤处理,例如:

I(‘post.email’,’’,,FLITER_VALIDATE_EMAIL);

表示会对$_POST[‘email’]进行格式验证,如果不符合要求的话,返回空字符串。或者可以用下面的字符标识方式:

I(‘post.email’,‘’,‘email’)

还可以支持进行正则匹配过滤,例如:

I(‘get,name’,’’,’/^[A-Za-z]+$/’)//采用正则表达式进行变量过滤

如果正则匹配不通过的话,则返回默认值

在有些特殊的情况下,我们不希望进行任何过滤,即使DEFAULT_FLITER已经有所设置,可以使用:

I(‘get.name’,’’,’’)

I(‘get.id’,’’,’false’)

这两种方式不采用任何过滤方法

一旦过滤参数设置为空字符创或者false,即表示不再进行任何的过滤。

 

S方法

读取数据缓存,而且是要设置DATA_CACHE_TYPE配置

在tp中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,直接采用S方法即可,例如:

1.     缓存初始化

2.     S(array(‘type’=>’xcache’,’expire’=>60))

缓存初始化可以支持的参数根据不同的缓存方式有所区别,常用的参数是:


参数

   

描述

   



Expire

   

缓存有效期(时间为秒)

   



Prefix

   

缓存标识前缀

   



Type

   

缓存类型

   


 

如果S方法不传入type参数初始化的话,则读取配置文件中设置的DATA_CACHE_TYPE参数值作为默认类型。同样的道理,prefix参数如果没有传入会读取配置文件中的DATA_CACHE_PREFIX参数值,expire参数没有传入则读取DATA_CACHE_TIME配置值作为默认。


 

 

 


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post