ThinkPHP学习记录.doc_第1页
ThinkPHP学习记录.doc_第2页
ThinkPHP学习记录.doc_第3页
ThinkPHP学习记录.doc_第4页
ThinkPHP学习记录.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ThinkPHP学习记录MVC:现在我们总绌MVC的处理过程,首先控制器接收用户的请求,来决定应调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的规图格式化模型返回的数据,并通过表示层呈现给用户。 对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。AOP(面向方面编程),可以说是OOP(面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP 允许定义从上而下的关系,但并不适合定从左到右的关系。而AOP技术则恰恰相反,它刟用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便亍减少系统的重复代码,降低模块间的耦合度。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,不与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。正如 Avanade 公司的高级方案极架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。” Active Record(活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将返种关系映射为对象的关联和聚集。Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。由Rails最早提出,遵循标准的ORM 模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。单一入口的好处是项目整体比较规范,因为同一个入口,往往其不同操作之间具有相同的规则。另外一个方面就是控制较为灵活,因为拦截方便了,类似如一些权限控刢、用户登录方面的判断和操作可以统一处理了。 使用ThinkPHP开发的过程中应该尽量遵循下列命名规范: 类文件都是以.class.php为后缀,使用驼峰法命名,并且首字母大写,例如 DbMysql.class.php; 确保文件的命名和调用大小写一致,是由于在类Unix 系统上面,对大小写是敏想的(而ThinkPHP在调试模式下面,即使在Windows平台也会严格检查大小写); 类名和文件名一致(包括上面说的大小写一致),例如 UserAction 类的文件命名是UserAction.class.php, InfoModel类的文件名是InfoModel.class.php, 并且不同的类库的类命名有一定的规范;函数、配置文件等其他类库文件之外的一般是以.php为后缀(第三方引入的不做要求);函数的命名使用小写字母和下划线方式,例如 get_client_ip; 方法的命名使用驼峰法,并且首字母小写戒者使用下划线“_”,例如 getUserName,_parseType,通常下划线开头的方法属于私有方法; 属性的命名使用驼峰法,并且首字母小写或者使用下划线“_”,例如 tableName、_instance,通常下划线开头的属性属于私有属性; 以双下划线“_”打头的函数或方法作为魔法方法,例如 _call 和 _autoload; 常量以大写字母和下划线命名,例如 HAS_ONE和 MANY_TO_MANY; 配置参数以大写字母和下划线命名,例如 HTML_CACHE_ON; 语言变量以大写字母和下划线命名,例如MY_LANG,以下划线打头的语言变量通常用于系统语言变量,例如 _CLASS_NOT_EXIST_; 对变量的命名没有强制的规范,可以根据团队规范来进行; ThinkPHP的模板文件默认是以.html 为后缀(可以通过配置修改); 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 think_user 表和 user_name字段,类似 _username 返样的数据表字段可能会被过滤。 另外有一点非常关键,ThinkPHP默认全部使用UTF-8 编码,所以请确保你的程序文件采用UTF-8 编码格式保存,并且去掉BOM 信息头,否则可能导致许多意想不到的问题。 ThinkPHP单一入口文件: APP_NAME 是指项目名称,不可随意设置,通常是项目的目录名称,如果直接部署在Web根目录下面,那需要设置 APP_NAME 为空。 APP_PATH 是指项目路径(必须以“/”结束),项目路径是指项目的Common、Lib目录所在的位置,而不是项目入口文件所在的位置。(在类Unix戒者Linux 环境下面Runtime目录需要可写权限。)项目发布:ThinkPHP系统目录 App 项目目录 Public 网站公共目录 Uploads 网站上传目录 index.php 网站的入口文件 项目的模板文件这是放到项目的 Tpl目录下面,叧是将外部调用的资源文件, 包括图片 JS 和CSS统一放到网站的公共目录Public下面,分Images、Js和Css 子目录存放,如果有可能的话,甚至也可以把返些资源文件单独放一个外部的服务器远程调用,并进行优化。 事实上,系统目录和项目目录可以放到非WEB访问目录下面,网站目录下面叧需要放置 Public 公共目录和入口文件,仍而提高网站的安全性。虽然编译缓存很优秀,但是并不利于开发阶段中调试和排错,所以开发阶段始终应开启调试模式,方便及及时发现隐患问题和分析、解决问题。惯例配置-项目配置-调试配置-分组配置-扩展配置-动态配置 以上是配置文件的加载顺序,因为后面的配置会覆盖之前的同名配置(在没有生效的前提下),所以优先顺序仍右到左。系统的配置参数是通过静态变量全局存取得,存取方式简单高效。配置参数不区分大小写(因为无论大小写定义都会转换成小写)。系统内置有一个惯例配置文件(位亍系统目录下面的Confconvention.php);项目配置文件位于项目 Confconfig.php一、ThinkPHP的URL重写。1、默认是智能模式,即pathinfo模式 http:/localhost/入口文件/控制器/方法/username=lin&userpwd=123456(它的GET传值与普通模式一样的。)2、可以在配置文件中修改(Conf/config.php),URL_PATHINFO_MODEL=2,即为URL智能模式;修改后一般需要删除runtime.php和app.php两个文件。3、URL_PATHINFO_DEPR=-,即可以把URL分割符改为-;APP_DEBUG=true,开启模式,将对大小写敏感,方便将项目布署到linux主机上。二、控制器内容如何用指定模板来解析。1、在控制器中用$this-display();即可调用默认的模板(即控制器名的文件夹下的方法名.html文件,例如User控制器下的Add方法,默认模板就是Tpl/User/Add.html)2、在控制器中用$this-assign(变量,值);的方式指定要在模板中显示的变量信息。如:$this-assign(myname,我的名字是李斯特); 如果是需要调用方法名以外的模板文件,可以在$this-display(newtpl);中指定,注意不要加.html。 如果调用的模板不在当前控制器目录下,则可以用$this-display(Index:newtpl);即制作器名:模板名,即可。 如果需要跨皮肤,即不调用当前default下的模板,可以用$this-display(skinIndex:newtpl);即“皮肤名控制器名:模板名” 如果需要按照一定的顺序找到其它的模板文件,可以写全路径,如:$this-display(D:APMServ5.2.6wwwhtdocsvideodemoPublicss.html); 也可以写与入口文件相对的相对路径,如$this-display(./Public/ss.html);即可调用项目文件夹下的Public/ss.html文件合为本方法的模板。 另外,在$this-display();中还可以有两个参数:$this-display(指定模板位置,编码,文件类型);例如:$this-display(index,utf-8,text/xml);可以输出到xml的模板。3、在模板的html文件中用定界符$myname即可调用变量。其中的定界符可以在配置文件中修改(因为它和javascript中的函数花括号冲突),具体为:TMPL_L_DELIM=, 两个配置项。ThinkPHP系统定义常量:1、示例程序地址:http:/localhost/tptest/index.php/user/sysarr即执行tptest目录下的home应用项目,中的User控制器下的sysarr方法。_ROOT_ 网站根目录 /tptest _APP_ 项目入口文件地址 /tptest/index.php_URL_ 当前控制器 /tptest/index.php/user _ACTION_ 当前操作 /tptest/index.php/user/sysarr_SELF_ 当前URL /tptest/index.php/user/sysarr _CURRENT_ 当前模块(控制器)的模版目录 /tptest/home/Tpl/default/user ACTION_NAME 当前操作名称 sysarrAPP_PATH 当前项目的目录 ./home/ APP_NAME 当前项目名称 home APP_TMPL_PATH 当前项目的默认模版目录 /tptest/home/Tpl/default/ APP_PUBLIC_PATH 当前项目公共文件目录 /tptest/home/Tpl/default/PublicCACHE_PATH 当前项目模版缓存目录 ./home/Runtime/Cache/CONFIG_PATH 项目的配置文件地址 ./home/Conf/ DATA_PATH 项目的数据文件地址 ./home/Runtime/Data/COMMON_PATH 项目的公共文件地址 ./home/Common/ WEB_PUBLIC_PATH 整个网站的公共文件目录 /tptest/Public 在代码段中用./Public即相对于主入口文件的地址。其他可参考手册。 2、模板替换:以上这些常量都可以在模板中进行直接替换。注意几个问题:A 如果需要将网站logo等全站都用到的图片放到全站公共目录中可以用_PUBLIC_/images/logo.gif来获取,即:/tptest/Public/images/logo.gif。而不能用./Public来,它的结果是找模板目录下的public,即: /tptest/home/Tpl/default/Public。B 在模板中提交用户注册数据,action=_URL_/add,提交路径应该用_URL_先定位到当前控制器,再加上接收此表单数据的方法名,即可。不要用绝对路径。C 在写后台上左右的分帧结构的时候,指定分帧地址时,也需要用这种方式,指定到控制器的某个方法,而不是解析这个方法的模板。这里需要注意一个问题:当开启APP_DEBUG后,它出来的调试信息是在body体里面,而上面这种分帧结构当中不能有body,所以显示会空白。(各浏览器表现不同。)D 系统常量也可以自己定义:在Conf/Config.php文件中加入下面的数组,注意配置文件本身就是数组,所以此数组定义要以“,”号结束。TMPL_PARSE_STRING = array( _GOOGLE_=,/定义了一个自定义常量,可以在模板任何位置使用它。 ),1、默认情况下,APP_DEBUG=true,开启调试模式后,系统会按照ThinkPHPCommondebug.php中定义的配置项进行调试。其中定义了如下配置项: DB_FIELDS_CACHE=false, /关闭了字段缓存,以便于程序中修改表字段入时能反映出来。还开启了运行时间等信息。 LOG_RECORD=true, / 进行日志记录 SHOW_RUN_TIME=true, / 运行时间显示 SHOW_ADV_TIME=true, / 显示详细的运行时间 SHOW_DB_TIMES=true, / 显示数据库查询和写入次数 SHOW_CACHE_TIMES=true, / 显示缓存操作次数 SHOW_USE_MEM=true, / 显示内存开销 SHOW_PAGE_TRACE=true, / 显示页面Trace信息 由Trace文件定义和Action操作赋值 APP_FILE_CASE = true, / 是否检查文件的大小写方便Windows下开发移植到Linux服务器中。 如果觉得些信息不需要,或不够,可在Conf/config.php中关掉调试模式,然后直接写上面的配置,就可以显示需要的信息。信息会自动追回到模板中。2、调试模式会显示页面Trace信息,提供了丰富的页面加载情况,模板缓存等实用信息,但如果需要扩展,比如加上IP、session值等,就需要在Conf文件夹下新建一个trace.php文件,return 一个array,用当前的server信息=$_SERVERREMOTE_ADDR,这样的形式自定义增加显示的Trace信息。从而方便调试。 也可以在Action中直接输出Trace信息:用$this-trace(名称,值); 3、APP_DEBUG不会显示所有的数据库操作语句,需要模型调试,显示数据库操作类中执行的具体SQL语句。 如用$User=new Model(User);实例化一个User模型,用 $User-find(1);查找其中一个行;然后就可以用 $User-getLastSql(); 来获得刚才的SQL语句。帮助我们排错。4、显示代码执行时间:debug_start(run); 无数行代码. debug_end(run);就可以输出中间代码的执行时间。5、调试过程中可以用 halt(提示语); 来中断程序运行,并显示提示语。6、日志记录。记录不同级别的日志信息。日志的级别及注释可以在ThinkPHP/Lib/Think/Core/Log.class.php文件中查看。 在项目配置文件中用LOG_RECORD = true,来开启日志记录。用LOG_RECORD_LEVEL=array(EMERG,ALERT,ERR),即可设置记录哪些级别的日志信息。 也可以在Action中手动写日志。Log:write($message,$level,$type,$file);参数分别指日志信息、级别、类型、文件存储位置。7、另外,在项目中添加自定义的debug.php的时候,需要用“防跳墙”,即加上这句:if (!defined(THINK_PATH) exit(); 在输入数据组时,thinkphp提供了dump($arr);方法,显示更友好。1、thinkphp为我们提供了各种数据库抽象层,自动调用数据库函数。只需在Conf/Config.php中增加配置。如果有前台后台不同的应用项目,就需要在两个应用项目分别进行配置文件,而其中有部分配置是相同的,且必须保持一致性,可以这样处理:(1)在与入口文件同级的目录下建一个config.inc.php文件,写上数据库配置等共用配置:return array(DB_DEPLOY_TYPE=1, /开启分布式数据库,主从数据库,比较适合高并发、高负载。DB_TYPE=mysql,DB_HOST=localhost,,, /可配置多个数据库服务器,需要在不同的数据库中进行相应的配置。系统读取写入的时候会自动连接相应的数据库,同步信息。DB_NAME=videodemo,videodemo1,videodemo2, /此处数据库名如果完全相同可以不定义,如果不同,定义与上面的数据库地址一一对应。下面的数据库用户名,密码,端口号,表前缀同理。建议最好全部用一样的。DB_USER=root, DB_PWD=liwenkaihaha, DB_PORT=3306, DB_PREFIX=think_, DB_RW_SEPARATE=true, /读写分离,默认第一台为写服务器,其他的都是读服务器。因为互联网应用中,写的数据比较少(且仅仅是管理员来操作),而读的数据是海量的话。 DB_CHARSET=utf8, /默认字符编码。DB_FIELDS_CACHE=true, /默认字段缓存。如果启用了字段缓存,会在RuntimeData_fieldsUser.php中以数组方式记录表字段。其中用0、1、2项记录字段,用_autoinc=true,项表示自增,_pk=id,项表示主键。DB_FIELDTYPE_CHECK=false, /是否进行字段检测。);(2)在前台后台的配置文件中用include包含共公配置文件,再返回给一个数组变量,前台自定义配置可以再用一个数组变量记录,然后再用 array_merge函数将它们合并起来,成为前台配置文件,后台同理。$arr1=array(/前台自定义配置:URL_MODEL=2, /URL方式为rewrite。);$arr2=include config.inc.php;return array_merge($arr1,$arr2);2、大部分情况推荐使用以上数据库配置形式。但有时需要在Action里连接一个临时的独立数据库,可以用以下两种方式:(1)DSN方式(数据源名方式):$dsn=mysql:/username:passwordlocalhost:3306/DBName; /新建一个数据库连接字符串。$db=new Db($dsn); /实例化一个数据库操作类。(2)数组方式:$dsn=array(dbms=mysql,username=google,password=googlepwd,hosname=,hostport=3306,database=googledns,);$db=new Db($dsn);3、用大C方法,读取配置文件的信息。C(配置项);即可,例如读取服务器地址:C(DB_HOST);ThinkPHP实例化模型(第9课时)1、只有实例化模型才能够对数据库和表来进行操作.而thinkphp提供了四种实例化模型的方法:(1)创建一个基础模型。thinkphp会自动根据我们的表,创建数据库操作类,直接用表名,就可以创建一个模型。$User= new Model(user); /此处等价于:$User=M(User)。注意,这里操作的表命名应该是think_user。但如果表名是think_user_massage传递user_massage和UserMassage是一样的,thinkphp会自动在大写的首字母前加一个_再把大写字母改为小写,从而找到相应的表名,因为表前缀think_中已经带了_,所以第一个首字母可大写也可小写。实例化之后,我们就可以用$List=$User-select(); dump($list); 即可遍历输出所有数据到一个数组。即直接调用Model中的方法,操作数据库。(2)自定义模型类。在实例化一个表的模型的时候,也可以同时实例化另一个自定义模型类:首先需要在应用项目的LibModel目录下自定义一个CommonModel.class.php,里面定义一个类:class CommonModel extends Model. 这里可以写上一些自定义的操作方法。$user=M(user,CommonModel); /这样$user对象不仅可以用Model进行数据库操作,也可以调用到自定义模型类中的方法。要用于扩展一些其他的逻辑操作,实现更加复杂的业务逻辑。此处也可以直接用$user=new CommonModel(User);因为CommonModel是继承自Model的,所以实例化了它,也就拥有了所有Model中的操作。(3)实例化一个用户定义的模型。手动创建一个模型,命名规范为 表名+Model,例如:UserModel.class.php 即操作的表为think_user,它继承自Model,所以可以在Model基础上添加一些自定义功能,实现复杂的业务逻辑。在Action中实例化直接用$User=new UserModel(); /此处不需要再传表名了,系统会根据命名规范找到表名。这里也可以用D方法,即:$User = D(User); (4) 实例化一个空模型,并不知道要操作哪个表。需要用传统的SQL语言方式操作数据表。例如:$user= new Model(); /也等价于$user=M();$list = $user-query(select * from think_user); /注意必须加表前缀。CURD操作和自动令牌(第10课时)1、在一个模型中使用另一表。一般情况下,我们定义的模型UserModel.class.php中只会操作think_user表,但如果需要改变当前表名,可以用一个受保护的成员变量:$tableName 和 $trueTableName(写表全名,可以用不同于配置文件中表前缀的表名。)例如:protected $tableName=UserMessageInfo; /等价于user_massage_info,使用的表名应该是think_user_massage_tected $truetableName=cms_user_massage; /使用的表名应该是cms_user_massage,就不会自动加上配置文件中的表前缀了。如果需要使用另一个数据库,可以用protected $dbName=dedecms;/就设置了当前数据库为dedecms2、在Action中可以用$User-getPk();来获取对象的主键;用$User-getDbFields();来获取所有字段信息。3、CURD操作:C创建 它是一系列方法的集合。能够实现三大自动:自动映射、自动填充、自动验证。如果开启字段缓存,它会匹配字段,如果字段不存在,它会获取字段。实现自动获取字段必须设置表单提交方式为POST。它会将获取到的相关数据,往一个对象的成员属性进行填充。为我们提供很大的便利。创建成功会返回一个数组,创建失败会返回false。例:if($vo=$user-create() dump($vo); $this-success(写入数据成功!); /会出现提示窗口并自动跳转; else $this-error($user-getError(); /可以显示具体错误信息;以上代码会自动加载一个提示信息窗口,即success.html模板中定义,此模板必须放在默认模板目录下的Public中(项目TpldefalutPublic)实际上系统是把表单数据压入到了模型对象中了,我们甚至可以实例化模型对象,再存到其中的成员属性的方式来修改提交的数据:$user-create(); /实际上在对象上已经压入了一个数组,存入了与表字段相关的表单数据。echo $user-username; /读取$user-password=md5($user-password); /写入。自动令牌验证:向当前Session会话中放一个md5加密的串,同时插入到表单中,这个串会同时存在于服务器的session和用户表单中,通过比对session信息来判断数据来源,防止跨站攻击。当然,它也可以在配置文件中关闭,TOKEN_ON=false,即可。如果不是使用create方法,也可以手动进行令牌验证。if(!$user-autoCheckToken($_POST) /验证失败的代码 U更新 $user-save();R读取:find();/查询一条数据。findAll(); /与select();一样查询出全部数据。(1)连贯操作:可以在查询时添加条件、排序、多表查询等。select()动作必须在最后。即在$list=$user-与select();之间插入一些操作,如where limit order 等,顺序可随意。完成一次查询后传值自动清空。例:$list=$user-limit(2)-order(id desc)-where(id2)-field(id,username)-select(); /查询出2条id2的数据,只输出id,username两个字段,按照id降序排列。也可以把查询条件都放到一个数组中。上面语句等价于:$list=$user-select(array(limit=2,order=id desc,where=id2,field=id,username);(2)几种方法介绍:$user-where(); /此处可以用字符串方式传值,也可以通过数组、对象等。$user-table(); /可以实现多表查询,要写表全名。可以传字符串,也可以传数组。例:$user-table(think_user user, think_user_massage m)-where(user.id=m.id)-select(); /以字符串形式传两个表 格式:表1命名 别名1 ,表2命名 别名2 . $user-table(array(think_user=user, think_user_massage=m)-where(user.id=m.id)-select(); /以数组形式传两个表 格式:array(表1命名=别名1 ,表2命名=别名2 .)$user-data(); /主要用在save(); add(); delete(); 中使用,主要是向对象传递数据。$user-field(); /用于指定字段,可以用 as来指定字段的别名,防止多表查询时同名字段不能正常显示。其传值方式可以是字符串也可以是数组。$user-getField(); /传入字段名,可以直接查询出某个字段的值,返回字条串,如果是多个字段就返回数组。与field()方法差不多。$user-order(); /指定排序方式,其传值方式可以是字符串也可以是数组。$user-limit(); /指定查询起始位置和查询条数。$user-page(); /查询分页,一般不用。实践中一般用单独的分页类。$user-group(); /分组,用字符串传入分组的字段。$user-having(); /主要用于二次过滤,结果更加精确。直接传入条件就行了,与where参数基本相同。$user-join(); /关联查询,内关联、左关联、右关联。例:$user-join(user on user.id=user_massgae.id)$user-distinct(); /唯一性过滤。用法:$user-distinct(true);relation(); /关联模型。lock(); /主要用于查询锁,用于事务处理。 用法:$user-lock(true); 一般myisam引擎基本已经自动表锁了,可以不考虑。ThinkPHP查询语言普通查询在查询带入where条件等,最少有三种形式在普通查询里面还可以使用查询表达示在此处我会跟大家把查询表达示都讲一次。EQ 等于(=)NEQ: 不等于(!=)GT 大于()EGT 大于等于(=)LT:小于()ELT:小于等于(5 and idwhere(array(username=liwenkai)-select();3,对象形式$user=M(user);$a=new stdClass();$a-username=liwenkai;$list=$user-where($a)-select();区间查询id3 and id10$dataid=array(array(gt,3),array(lt,10);组合查询$datausername=liwenkai;$datapassword=array(eq,wenkai);$dataid=array(lt,10);/where username=liwenkai and password=wenkai and id3; /直接使用标准的SQL语句中的Where条件。 $data_logic=or; /改变查询逻辑关系复合查询$data1username=array(eq,liwenkai);$data1password=array(like,w%);$data1_logic=or; /定义内存查询的条件和逻辑关系$data2_complex=$data1; /把内层查询条件data1 的条件包含进外层条件data2 中$data2id=array(lt,5); /定义外层data2 的具体条件 $list=$user-where($data2)-select(); /查询的时候把最外层查询data2条件带入。其中已经包含了内层查询条件。 / 具体条件应该是:(idcount(); /总数/$user-max(字段);/查询量大值/$user-min(字段);/$user-avg(字段) /求平均数/$user-sum(字段) /求和定位查询getN(正数或者负数) /直接返回结果用的某条记录;默认从0开始。/此方法是属于AdvModel中的,在Model中没有封装,需要实例化时用$user=new AdvModel(user)。或者自定义一个UserModel让其继承自AdvModel即可。 last / 返回结果最后一条first / 返回结果第一条。SQL查询 直接写SQL语句,表名要写全名。execute() / 主要用于更新和写入,用于有受影响行数,没有结果集的。query() / 主要用于查询,用于有受影响行数,同时有结果集的。动态查询 getBy字段名,可以以某个字段名为条件查找出指定的数据。例:$user-getByusername(liwenkai);即可查询出username为liwenkai的记录;其实此方法并不存在,是根据字段名动态实现的。top5();查出前5条,可以配合where语句。例:$user-where(id0)-top3();即查找出id0的前3条记录;ThinkPHP三大自动ThinkPHP三大自动:一、自动验证:生效时机是在create方法时,写在自定义模型里,完成用户输入信息时对表单或数据库中的字段进行验证。自动验证是针对数据库级别的验证,是系统内置的自动验证功能来进行验证的,而大多数情况下,数据对象是由表单$_POST提交的,就需要验证。手动写的验证代码很多,且不易重用。就需要自动验证。自动验证需要写到自定义模型中,然后用D方法实例化它。需要根据自己的不同情况来写。thinkpphp为我们封装的是一个成员属性,以array形式存起来。在create的时候,内部会去自动找这些自动验证的方法,如果验证失败,create即失败。一个数组就是一条验证规则,格式:array(验证字段,验证规则,错误提示,验证条件,验证方式,验证时机), 1、验证字段:需要验证的表单字段名称,也可以表单当中的一些辅助字段,例如验证码,附加码,重复密码等;2、验证规则,必须要在附加规则中指定验证类型,两项配合使用。3、错误提示:出现错误时给用户的提示信息。4、验证条件:0 表示必须验证;1 有此表单项时就验证;2 表示值不为空时验证。5、验证方式: regex 正则方式 可以自己在验证规则当中写一个正则表达式,或者用thinkphp中封装好的一些正则; function 使用函数进行验证,前面验证规则这个地方必须要写函数名; callback 回调函数 他会去找当前UserModel当中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论