ThinkPHP自学笔记
thinkphp5.1学习笔记

thinkphp5.1学习笔记tp配置技巧配置的get和settp5.1的配置在config⽬录⾥,⼀个⽂件是⼀个⼀级配置项,每个⽂件⼀⾏是⼆级配置项。
use think\facade\Config;//导⼊Config 门脸public function get(){//获取全部配置// dump(Config::get());//只获取app配置项dump(Config::get('app.'));dump(Config::pull('app'));//获取⼆级配置项dump(Config::get('app.app_debug'));dump(Config::get('app_debug'));//由于app是默认⼀级配置项,可以省略dump(Config::has('default_lang'));//检查是否有这个配置项,true/falsedump(Config::get('database.hostname'));}public function set(){//动态设置,静态设置是修改配置⽂件dump(Config::set('app_debug'));}}使⽤助⼿函数public function helper(){//助⼿函数不依赖于Config,不需要导⼊Config类//dump(config());//获取全部配置,相当于Config::get()dump(config('default_lang'));dump(config('?default_lang'));//查看是否存在,true/falsedump(config('database.hostname','localhost'));//设置,返回新的设置值localhost}traittrait ⽅法优先级⼩于⽗类,当两个trait ⽅法同名,会出错,需要如下:use Demo1 ,Demo2{Demo1::hello insteadof Demo2;Demo2::hello as Demo2hello;}容器/依赖注⼊/静态代理/请求对象容器与依赖注⼊的原理任何url的访问都是定位到控制器的,<?phpnamespace app\index\controller;class Demo1{public function d1(\app\common\B $b){//拿B做参数,当访问的d1⽅法⾃动实例化⼀个B,但是URL⾥不含参数。
thinkphp笔记2

数据库部分mysql,mssql,pgsql,sqllite,oracle,ibase,PdoConfig.php//数据库抽象层到底选择哪一个,无论选哪个数据库连接方式,都是使用thinkphp封装好的方法进行增删改查‘DB_TYPE’=>’mysql’,‘DB_HOST’=>’localhost’, //主机名‘DB_NAME’=>’User’, //库名‘DB_USER’=>’root’, //用户‘DB_PWD’=>’12345’, //密码‘DB_PORT’=>’3306’, //端口‘DB_PREFIX’=>’think_’//表前缀这个设置应该放在公共位置在另外一个页面之中定义一个配置项,然后将各个应用下的自定义(个性)配置文件组合起来return 返回去原理 a.php<?phpreturn array(‘abc’=>’中国’,‘bcd’=>’中华’,);?>b.php<?php$arr=include ‘a.php’;var_dump($arr); //这时b页面就可以?>操作:与主入口文件平级的目录新建config.inc.php<?php//写下公共配置?>分别在admin 和home 子应用下的config.php写下<?php$arr1=array(//个性配置);$arr2=include ‘./config.inc.php’;return array_merge($arr1,$arr2);?>在个性配置时:admin URL模式为‘URL_MODEL’=>0,home 的为‘URL_MODEL’=>2, //rewrite//另外thinkphp还为我们提供了其他的数据库连接方式DNS1.手动连接数据库形式$dns=’mysql://username:password@ localhost:3306/DBNAME’;用来跨库操作;$db=new Db($dsn);2.$dsn=array(‘dbms’=>’mysql’,‘DB_HOST’=>’localhost’, //主机名‘DB_NAME’=>’User’, //库名‘DB_USER’=>’root’, //用户‘DB_PWD’=>’12345’, //密码‘DB_PORT’=>’3306’, //端口‘DB_PREFIX’=>’think_’//表前缀);$db=new Db($dsn);3.自定义数据库类Model/UserModel.class.php<?phpclass UserModel extends Mode{protected $connection=array(‘dbms’=>’mysql’,‘DB_HOST’=>’localhost’, //主机名‘DB_NAME’=>’User’, //库名‘DB_USER’=>’root’, //用户‘DB_PWD’=>’12345’, //密码‘DB_PORT’=>’3306’, //端口‘DB_PREFIX’=>’think_’//表前缀);}?>主从数据库比较适合高并发高负载mysql可能以后是一个瓶颈开启数据库的分布式在公共配置文件中config.inc.php ‘DB_DEPLOY_TYPE’=>1,这时’DB_HOST’=>’localhost,192.168.0.1,192.168.0.2,……’剩下的数据库名和用户名密码最好设置成统一的或者写成上面的形式读写分离写的数据比较少而读的数据是海量的‘DB_RW_SEPARATE’=>true,此时主服务器为写服务器其他的为读服务器(数据库同步可以看数据库集群)所有的数据库配置均可以在ThinkPHP/common/convention.php 中设置自定义配置高于默认设置读取配置文件中的参数C();C(‘DB_HOST’)C(‘URL_MODEL’)C(‘DB_PREFIX’)等连接数据库之后的相关操作IndexAction.class.php如何实例化模型1.创建一个基础模型2.实例化一个系统自带的数据库操作类 2.0更加科学更加方便我们可以不用自己定义相关的数据库操作类thinkphp会自动帮我们找到这个数据库当中的表,并把表当中的相应的字段全部拿过来直接操作这个对象就是操作这张表new Model 在Model当中上传一个我们需要操作的表即可首字母大写原因因为我们命名表的时候think_user thinkphp 会按照大小写来区别你在前边有没有加下划线(1)$User=new Model(‘User’)表名为think_user_message 时$abc=new Model(‘UserMessage’) 或Model(‘User_message’)实例化对象之后就能直接使用这个模型操作类当中的方法进行相应的操作$user=new Model('User');$list=$user->select();dump($list);array(2) {[0] => array(3) {["id"] => string(1) "1"["username"] => string(4) "aaaa"["password"] => string(32) "74b87337454200d4d33f80c4663dc5e5"}[1] => array(3) {["id"] => string(1) "2"["username"] => string(4) "bbbb"["password"] => string(32) "65ba841e01d6db7733e90a5b7f9e6f80"}}对于我们来说操作数组非常方便,而用数组分配到魔板当中进行遍历显示也是非常方便的所以thinkphp默认返回一个数组对于传统模式fetch_rows ………可以不用去管遍历形成数组的过程,已经遍历好了M() $user=M(‘User’);你需要实例化一个表勇士实例化一个自己写的数据库操作类(2)CommonModel.class.php<?phpclass CommonModel extends Model{public function abc(){echo ‘aaa’;}}?>IndexAction.php$user=M(‘User’,’CommonModel’);$user->abc();相当于$user= new CommonModel(‘user’);这样可以封装一些额外的逻辑方法(3)实例化一个用户定义模型需要手动创建一个模型 user 可以针对这张表来写一个自定义模型在自动模型当中可以封装thinkphp为我们提供的一些高级功能,还可以封装一些自定义方法来实现更加复杂的业务逻辑。
thinkphp笔记3

数据库部分2实例化模型的时候一般用M(‘user’)当表名为think_user_messageM(‘userMessage’) 或M(‘UserMessage’)对应创建UserMessageModel.class.php当这个类中想操作别的表名时真正表名为think_user_message_infoprotected $tableName=’UserMessageInfo’当表前缀不是think_ 时如cms_ blog_ 等protected $trueTableName=’cms_user’;跨库操作protected $dbName=’’;获取字段磁盘当中自动创建一个文件来写入我们的表字段信息一般情况下多服务器我们一般不向本地文件系统当中写入数据一方面担心无法解决到底在那个服务器上上传数据一方面为了节约系统的I/O开销,我们可以将对应的字段写到我们的Model里面来这样的话能够提高效率的同时节约I/O开销实现更加智能的用户信息判断字段protected $fields=array(0=>’id’,1=>’username’,2=>’password’,‘_pk’=’id’,‘_autoinc’=true,);$对象->getPk(); //获取主键$对象->getDbFields(); //夺取列信息CURD//创建更新读取删除(插入)create为什么要创建?创建的功能比我们想象的多它会自动获取相关数据自动令牌验证完成自动映射自动填充自动验证(三大自动)如果开启字段缓存还会匹配字段如果不存在字段他会获取字段(create)他是一系列方法的集合他返回一个数组,如果创建失败他会返回false可不可以不用创建?进了能使用创建会给我们很大的便利,他会将我们获取到的相关数据往一个对象成员属性里加注自动令牌!?完成信息的添加,修改有的人把网站页面另存为到了本地模拟了很多组数据不停的刷新向数据库中写入他还隐藏表单当中的ID给改了不仅可以改ID 为1 还可以改ID为2的处理过程当中可以判断上级来源如果上级来源的地址等于哦我们呢网站的地址我们将其写入如果不是我网站的我就禁止其写入上级来源可以被模拟thinkphp 提供了更加先进的解决方案自动令牌向当期那的SESSION回话当中放上一个MD5加密的字符串他会见这个字符串插入到表单的</from>之前第二个地方就是表单当中有function add(){$user=new Model('user');//这个数组信息,如查你用上了自动添充等,他的返回值更多啊。
thinkphp学习笔记

thinkphp学习笔记thinkphp学习笔记MVC1、ly/index.php-Home/Lib/Action/IndexAction.class.phphttp://127.0.0.1/ly/index.php/index/showurl的4种访问方式 //重点!1.PATHINFO 模式 -- 重点http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值22.普通模式http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值23.REWRITE模式(重写模式)http://域名/项目名/模块名/方法名/键1/值1/键2/值24.兼容模式http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2常用函数配制文件1、'URL_PATHINFO_DEPR'=->'-',修改Url的分隔符2、引用入口文件中,开启/关闭后DEBUG调试模式。
关闭缓存文件define(‘APP_DEBUG’,TRUE);3、开启REWRITE模式1)修改apache配制文件,去掉REWRITE前面的逗号文件;2)修改入口文件的目录下创建.htaccessRewriteEngine on//开启重写引擎RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]//去掉index.php 这个符号4、输出this->display()控制器文件的名称与模板文件名相同。
写一个与方法名同名的文件分配一个变量个模板this->assign(表示名,具体的值)this—>assign(‘data’,$name)前台页面的{}输出,在thinkphp中表示定界符5、修改左右定界符在配置文件中添加‘TML-L-DELIM’=>‘<{’,修改左定界符‘TML-L-DELIM’=>‘}>’,修改右定界符6、thinkphp/Home/Lib/Action/IndexAction.class.phpclass IndexAction excends Action{public function index(){$m=new Model('User');//新建一个模型类,并传如一个数据表$m=M('User');//等效于$m=new Model('User'),表名第一个字母大写$arr=$m->select();//将返回的对象调用一个select方法,并将返回的值赋值$var_dump($arr)$this->assign('data',$arr[0]['username']);//将$arr[0]['username']的值分配给data$this->assign('data',$arr);//将整个数组拿出来$this->display();//输出模板}public funcion show(){$this->display;}}thinkphp/Home/Tpl/Index/index.htmlhello <{$data}>//遍历数组//name传送过来的标示,模板遍历数组<{$vo.id}><{$/doc/9d12655846 .html,ername}><{$vo.sex}>thinkphp/Home/Conf/config.class.phpreturn array('URL_PATHINFO_DERP'=>'/',/修改YRL的分隔符/'TMPL_L_DELIM'=>'<{',//修改左定界符'TMPL_R_DELIM'=>'}>',//修改右定界符'DB_TYPY'=>'mysql',//设置数据库类型'DB_HOST'=>'localhost',//设置主机'DB_NAME'=>'myselft',//设置数据库名'DB_USER'=>'root',//设置数据库用户'DB_PWD'=>'root',//设置数据库密码'DB_PORT'=>'3306'//设置数据库访问端口'DB_PREFIX'=>'my_',//设置表前缀'DB_DSN'=>'mysql://root:@localhost:3306/mysql'//使用dsn方式配置数据库信息如果两者同时存在优选使用dsn方式)C-CREATE $m->add()U-UPDATE $m->save()R-READ $m->selectD-DELETE $m->delete()开启调试功能中的page_trace1)开启调试模式define(‘APP_DEBUG’,true)2)设置配置文件中加入配置项,开启页面trace'SHOW_PAGE_TRACE'=>TRUE。
thinkphp3.2.3学习笔记

thinkphp3.2.3学习笔记3.2框架初始的⽬录结构如下:1. 部署⽬录(或者⼦⽬录)2. ├─index.php ⼊⼝⽂件3. ├─README.md README⽂件4. ├─Application 应⽤⽬录5. ├─Public 资源⽂件⽬录6. └─ThinkPHP 框架⽬录3.2版本⾃带了⼀个完整的应⽤⽬录结构和默认的应⽤⼊⼝⽂件。
其中,Application 和Public ⽬录下⾯都是空的。
README.md⽂件仅⽤于说明,实际部署的时候可以删除。
上⾯的⽬录结构和名称是可以改变的,这取决于你的⼊⼝⽂件和配置参数。
Application⽬录默认是空的,但是第⼀次访问⼊⼝⽂件会⾃动⽣成,参考后⾯的⼊⼝⽂件部分。
其中框架⽬录ThinkPHP的结构如下:1. ├─ThinkPHP 框架系统⽬录(可以部署在⾮web⽬录下⾯)2. │├─Common 核⼼公共函数⽬录3. │├─Conf 核⼼配置⽬录4. │├─Lang 核⼼语⾔包⽬录5. │├─Library 框架类库⽬录6. ││├─Think 核⼼Think类库包⽬录7. ││├─Behavior ⾏为类库⽬录8. ││├─Org Org类库包⽬录9. ││├─Vendor 第三⽅类库⽬录10. ││├─... 更多类库⽬录11. │├─Mode 框架应⽤模式⽬录12. │├─Tpl 系统模板⽬录13. │├─LICENSE.txt 框架授权协议⽂件14. │├─logo.png 框架LOGO⽂件15. │├─README.txt 框架README⽂件16. │└─index.php 框架⼊⼝⽂件上述应⽤的⽬录结构只是默认设置,事实上,在实际部署应⽤的时候,我们建议除了应⽤⼊⼝⽂件和Public 资源⽬录外,其他⽂件都放到⾮WEB⽬录下⾯,具有更好的安全性。
⼊⼝⽂件:define('APP_PATH','./Apps/');define('DIR_SECURE_', 'default.html');//⽀持多个安全⽂件写⼊define('DIR_SECURE_', 'index.html,index.htm');//默认的安全⽂件只是写⼊⼀个空⽩字符串,如果需要写⼊其他内容,可以通过DIR_SECURE_CONTENT参数来指定define('DIR_SECURE_CONTENT', 'deney Access!');define('RUNTIME_PA TH','./Runtime/');define('APP_DEBUG',True);define('THINK_PA TH',realpath('../Think').'/');require THINK_PATH.'ThinkPHP.php';//require './ThinkPHP/ThinkPHP.php';*配置⽂件的定义格式均采⽤返回PHP数组的⽅式*惯例配置⽂件(位于ThinkPHP/Conf/convention.php)*应⽤配置⽂件调⽤所有模块之前都会⾸先加载的公共配置⽂件(默认位于Application/Common/Conf/config.php)获取已经设置的参数值:C('参数名称')设置新的值:C('参数名称','新的参数值');扩展配置可以⽀持⾃动加载额外的⾃定义配置⽂件,并且配置格式和项⽬配置⼀样。
thinkPHP学习笔记18-29

thinkPHP学习笔记18-29预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制【知识回顾】数据库模型model应用mysql数据库操作(增、删、查、改)【链接数据库配置】convertion.phpconfig.php1.在config.php里面做数据库链接配置2.新建model,并修改其trueTablename属性3.修改表前缀4.字段缓存设置tp框架执行过程中会使用到数据表中的字段信息,通过sql语句“show colums from table”,出于性能考虑,可以把字段缓存,避免每次重复执行SQL语句。
5. 可以根据当前情况对model进行个性化设置【实例化Model的三种方式】1.$goods=new 命名空间GoodModel();2.$goods=D(“模型标志”);a)$goods=D(“Goods”);b)该¥goods是父类Model的对象,单操作的数据表还是sw_goodsc)$goods=D()实例化Model对象,没有具体操作数据表,与M()方法效果一致;3.$obj=M();a)实例化父类Modelb)可以直接调用父类Model里面的属性,获得数据库相关操作c)自定义Model就是一个空壳,没必要实例化自定义modeld)$obj=M(“数据表标志”);实例化Model对象,实际操作具体的数据表D()和M()的区别前者是tp3.1.3里面对new操作的简化方法后者在使用,就是实例化Model父类两者都在函数库文件定义ThinkPHP/Common/functions.php 注意,如果没有对应的Model模型文件,也可以直接实例化model对象进行操作D(),M()都可以实例化操作一个没有具体Model模型类文件的数据表【数据查询】select() 是数据模型的一个指定方法,可以获得数据表的数据信息返回一个二维数组,是数据表的全部信息1.配置smartya)配置变量信息(1)convertion.php(2)Behavior.php(页面底部显示配置,smarty配置)(3)系统里面还有一些零散的配置信息b)在config.php 里面配置smarty实用信息模板引擎配置参数(不能直接修改,在config.php里面重写)2.具体使用(从tp引擎变成smarty引擎)a)css样式如果有{},需要使用{literal}标签禁止smarty解析b)关键字$Think变为$smarty3.tp 引擎会对关键字常量进行替换,例如:__CONTROLLER__ __MODEL__smarty引擎不会给替换,需要设置为:{$smarty.const.__CONTROLLER__}【各种查询条件设置】$obj=D(标志);创建对象$obj->select();select 字段,字段from 表名where 条件group by 字段having 条件order by 排序limit 限制条数;select %DISTINCT%%FIELD% from %TABLE%%JOIN% where %% group %% having %%order %% limit %%UNION%%COMMENT%$obj->field(字段,字段);查询制定字段$obj->table(数据表);通过具体数据表查询$obj->where(参数); 查询的限制条件$obj->group(字段); 根据分组进行查询$obj->having(参数条件);having限制条件$obj->order(“price desc/asc”);排序查询$obj->limit([偏移量,]条数);查询条数限制sql 语句里面具体的设置条件在tp框架模型里边体现为体现为具体的方法操作以上方法理论上都是父类model对应的方法父类model具体存在的方法:field(),where(),limit()还有一些方法在__call()自动调用函数里面:table(),group(),order(),having() 在__call()魔术方法里面会判断当前执行的方法是否是一个method属性的元素信息,如果存在就会执行以上多个方法是同时使用多个进行显示(并且没有顺序要求)$obj->limit(5)->field(…id,name?)->order(…pieceasc?)->table(…sw_goods?)->select();以上许多方法执行没有顺序要求,许多方法执行后都是把具体的参数赋予到Model属性option里面,最后根据option拼装sql语句。
THINKPHP学习笔记10 17

问题1:thinkPHP默认访问的模块、控制器、方法是什么?问题2:thinkPHP对模块缺失如何处理?frameset绝对路径写法thinkPHP常量写法【空操作和空控制器的使用】空操作:访问不存在的方法空控制器:访问不存在的控制器http://网址/index.php/Home/User/loginhttp://网址/index.php/Home/User/login空操作http://网址/index.php/Home/beijing/login空控制器空操作一般网站出于安全考虑,不给用户提供任何错误信息“空操作”的本质意思:一个对象(控制器)调用本身不存在的方法在OOP里面,对象调用不存在的方法,出于用户体验的考虑,我们可以使用类里面的魔术方法:function__call();普通控制器父类的位置Controller类中的__call()方法从以上代码可知,空操作有两种解决方法:1.在对应控制器里面制作一个方法,名称为“_empty”,则这个控制器的空操作都会执行该方法。
(推荐使用)2.给空操作的名称制作一个同名模板,系统会自动调用。
【空控制器】http://网址/index.php/Home/Tianjin/login空控制器:在实例化控制器对象的时候,没有找到制定的类什么时候实例化控制对象:ThinkPHP/Library/Think/App.class.php熟记文件:index.php入口文件ThinkPHP/ThinkPHP.php框架核心文件ThinkPHP/Library/Think/Think.class.php框架核心文件ThinkPHP/Library/Think/App.class.php框架应用文件App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容空控制器处理方案:可以制作一个控制器,名称为EmptyController.class.php在该控制器内部只需要有一个_empty()方法即可。
thinkphp学习笔记-9页word资料

-------------------ONE-----------------------------一、ThinkPHP的介绍//了解MVCM - Model 模型工作:负责数据的操作V - View 视图(模板)工作:负责前台页面显示C - Controller 控制器(模块)工作:描述功能框架二、ThinkPHP的获取//了解http://thinkphp三、ThinkPHP核心文件介绍//了解├─ThinkPHP.php 框架入口文件├─Common 框架公共文件├─Conf 框架配置文件├─Extend 框架扩展目录├─Lang 核心语言包目录├─Lib 核心类库目录│├─Behavior 核心行为类库│├─Core 核心基类库│├─Driver 内置驱动││├─Cache 内置缓存驱动││├─Db 内置数据库驱动││├─TagLib 内置标签驱动││└─Template 内置模板引擎驱动│└─Template 内置模板引擎└─Tpl 系统模板目录四、实验环境搭建//了解五、项目搭建//重点#项目目录结构及说明:Home 前台应用文件夹├─Common 项目公共文件目录├─Conf 项目配置目录├─Lang 项目语言目录├─Lib 项目类库目录│├─Action Action类库目录│├─Behavior 行为类库目录│├─Model 模型类库目录│└─Widget Widget类库目录├─Runtime 项目运行时目录│├─Cache 模板缓存目录│├─Data 数据缓存目录│├─Logs 日志文件目录│└─Temp 临时缓存目录└─Tpl 项目模板目录-------------------TWO-----------------------------一、什么是MVC //了解M -Model 编写model类对数据进行操作V -View 编写html文件,页面呈现C -Controller 编写类文件(UserAction.class.php)二、ThinkPHP的MVC特点//了解三、ThinkPHP的MVC对应的目录//了解M 项目目录/应用目录/Lib/ModelV 项目目录/应用目录/TplC 项目目录/应用目录/Lib/Action四、url访问C //了解五、url的4种访问方式//重点!1.PA THINFO 模式-- 重点!!!!!!http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值22.普通模式http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值23.REWRITE模式http://域名/项目名/模块名/方法名/键1/值1/键2/值24.兼容模式http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2-------------------THREE-----------------------------一、ThinkPHP 3 的输出(重点)a、通过echo 等PHP原生的输出方式在页面中输出b、通过display方法输出想分配变量可以使用assign方法c、修改左右定界符休要修改配置文件中的配置项'TMPL_L_DELIM'=>'<{', //修改左定界符'TMPL_R_DELIM'=>'}>', //修改右定界符二、ThinkPHP 3 的模型使用(重点)需要在方法中通过new Model(表名)的形式操作数据库$m=new Model('User');$arr=$m->select();'DB_TYPE'=>'mysql', //设置数据库类型'DB_HOST'=>'localhost',//设置主机'DB_NAME'=>'thinkphp',//设置数据库名'DB_USER'=>'root', //设置用户名'DB_PWD'=>'', //设置密码'DB_PORT'=>'3306', //设置端口号'DB_PREFIX'=>'tp_', //设置表前缀-------------------FOUR-----------------------------一、ThinkPHP 3 的输出(重点)a、通过echo 等PHP原生的输出方式在页面中输出b、通过display方法输出想分配变量可以使用assign方法c、修改左右定界符休要修改配置文件中的配置项'TMPL_L_DELIM'=>'<{', //修改左定界符'TMPL_R_DELIM'=>'}>', //修改右定界符二、ThinkPHP 3 的模型使用(重点)需要在方法中通过new Model(表名)的形式操作数据库$m=new Model('User');$arr=$m->select();'DB_TYPE'=>'mysql', //设置数据库类型'DB_HOST'=>'localhost',//设置主机'DB_NAME'=>'thinkphp',//设置数据库名'DB_USER'=>'root', //设置用户名'DB_PWD'=>'', //设置密码'DB_PORT'=>'3306', //设置端口号'DB_PREFIX'=>'tp_', //设置表前缀也可以使用DSN方法进行配置'DB_DSN'=>'mysql://root:@localhost:3306/thinkphp',//使用DSN方式配置数据库信息如果两种方式同时存在,以DSN方式为优先还有一种简单实用模型的方式M() 等效为new Model();$m=M('User');$arr=$m->select();使用模型的实例可以对数据进行操作,操作的工作一般就是对数据库进行增删改查CURD 增-C Create $m->add()删-D Delete $m->delete()改-U Update $m->save()查-R Read $m->select()三、补充(了解)a、模板可以遍历数组<volist name='data' id='vo'><{$vo.id}>----<{$ername}>-----<{$vo.sex}><br/></volist>b、我们可以开启调试功能中的page_trace1.开启调试功能//3.开启调试模式define('APP_DEBUG',true);2.我们需要设置配置文件,开启页面trace'SHOW_PAGE_TRACE'=>true,//开启页面Trace-------------------FIVE-----------------------------一、ThinkPHP 3 的CURD介绍(了解)二、ThinkPHP 3 读取数据(重点)对数据的读取Read$m=new Model('User');$m=M('User');select$m->select();//获取所有数据,以数组形式返回find$m->find($id);//获取单条数据getField(字段名)//获取一个具体的字段值$arr=$m->where('id=2')->getField('username');三、ThinkPHP 3 创建数据(重点)对数据的添加Create$m=new Model('User');$m=M('User');$m->字段名=值$m->add();返回值是新增的id号四、ThinkPHP 3 删除数据(重点)$m=M('User');$m->delete(2); //删除id为2的数据$m->where('id=2')->delete(); //与上面效果相同,也是删除id为2的数据返回值是受影响行数五、ThinkPHP 3 更新数据(重点)$m=M('User');$data['id']=1;$data['username']='ztz2';$m->save($data);返回值是受影响行数-------------------SIX-----------------------------一、普通查询方式a、字符串$arr=$m->where("sex=0 and username='gege'")->find();b、数组$data['sex']=0;$data['username']='gege';$arr=$m->where($data)->find();注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值$data['sex']=0;$data['username']='gege';$data['_logic']='or';二、表达式查询方式$data['id']=array('lt',6);$arr=$m->where($data)->select();EQ 等于NEQ不等于GT 大于EGT大于等于LT 小于LIKE 模糊查询$data['username']=array('like','%ge');$arr=$m->where($data)->select();NOTLIKE$data['username']=array('notlike','%ge%'); //notlike中间没有空格$arr=$m->where($data)->select();注意:如果一个字段要匹配多个通配符$data['username']=array('like',array('%ge%','%2%','%五%'),'and');//如果没有第三个值,默认关系是or关系$arr=$m->where($data)->select();BETWEEN$data['id']=array('between',array(5,7));$arr=$m->where($data)->select();//SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) )$data['id']=array('not between',array(5,7));//注意,not 和between中间一定要有空格$arr=$m->where($data)->select();IN$data['id']=array('in',array(4,6,7));$arr=$m->where($data)->select();//SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) )$data['id']=array('not in',array(4,6,7));$arr=$m->where($data)->select();//SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) )-------------------SEVEN----------------------------一、普通查询方式a、字符串$arr=$m->where("sex=0 and username='gege'")->find();b、数组$data['sex']=0;$data['username']='gege';$arr=$m->where($data)->find();注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值$data['sex']=0;$data['username']='gege';$data['_logic']='or';二、表达式查询方式$data['id']=array('lt',6);$arr=$m->where($data)->select();EQ 等于NEQ不等于GT 大于EGT大于等于LT 小于LIKE 模糊查询$data['username']=array('like','%ge');$arr=$m->where($data)->select();NOTLIKE$data['username']=array('notlike','%ge%'); //notlike中间没有空格$arr=$m->where($data)->select();注意:如果一个字段要匹配多个通配符$data['username']=array('like',array('%ge%','%2%','%五%'),'and');//如果没有第三个值,默认关系是or关系$arr=$m->where($data)->select();BETWEEN$data['id']=array('between',array(5,7));$arr=$m->where($data)->select();//SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) )$data['id']=array('not between',array(5,7));//注意,not 和between中间一定要有空格$arr=$m->where($data)->select();IN$data['id']=array('in',array(4,6,7));$arr=$m->where($data)->select();//SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) )$data['id']=array('not in',array(4,6,7));$arr=$m->where($data)->select();//SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) )三、区间查询$data['id']=array(array('gt',4),array('lt',10));//默认关系是and 的关系//SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 10) )$data['id']=array(array('gt',4),array('lt',10),'or') //关系就是or的关系$data['name']=array(array('like','%2%'),array('like','%五%'),'gege','or');四、统计查询count //获取个数max //获取最大数min //获取最小数avg //获取平均数sum //获取总和五、SQL直接查询a、query 主要数处理读取数据的成功返回数据的结果集失败返回boolean false$m=M();$result=$m->query("select * from t_user where id >50");var_dump($result);b、execute 用于更新个写入操作成功返回影响行数失败返回boolean false$m=M();$result=$m->execute("insert into t_user(`username`) values('ztz3')");var_dump($result);------------------EIGHT---------------------------一、常用连贯操作1.where帮助我们设置查询条件2.order对结果进行排序$arr=$m->order('id desc')->select();$arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select();3.limit限制结果limit(2,5)limit('2,5')limit(10)//limit(0,10)4.field设置查询字段field('username as name,id')field(array('username'=>'name','id')field('id',true) //获取除了id以外的所有字段5.table6.group7.having二、补充alias 用于给当前数据表定义别名字符串page 用于查询分页(内部会转换成limit)字符串和数字join* 用于对查询的join支持字符串和数组union* 用于对查询的union支持字符串、数组和对象distinct 用于查询的distinct支持布尔值lock 用于数据库的锁机制布尔值cache 用于查询缓存支持多个参数(以后在缓存部分再详细描述)relation 用于关联查询(需要关联模型扩展支持)字符串validate 用于数据自动验证数组auto 用于数据自动完成数组filter 用于数据过滤字符串scope* 用于命名范围字符串、数组------------------NINE---------------------------一、模板的使用(重点)a、规则模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)更换模板文件的后缀名(修改配置文件)'TMPL_TEMPLATE_SUFFIX'=>'.html',//更改模板文件后缀名b、修改模板文件目录层次'TMPL_FILE_DEPR'=>'_',//修改模板文件目录层次c、模板主题'DEFAULT_THEME'=>'your',//设置默认模板主题需要在TPL下面新建一个your文件夹作为模板主题文件夹如何动态修改模板主题?1、在后台准备一个功能,修改config.php文件中的默认模板项2、通过url传递t=主题参数可以修改不同的模板'DEFAULT_THEME'=>'your',//设置默认模板主题'TMPL_DETECT_THEME'=>true,//自动侦测模板主题'THEME_LIST'=>'your,my',//支持的模板主题列表二、输出模板内容(重点)a、display1.display中没有参数$this->display();2.可以带参数$this->display(本模块文件夹下的其他模板文件);$this->display('index2');$this->display(其他文件夹下的模板文件);$this->display('Public:error');//注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html 即可,不需要一定有Public模块$this->display(其他主题下的文件夹下的模板文件);//需要开启主题支持$this->display('my:Index:index');$this->display(一个url路径);$this->display('./Public/error.html');$this->display('./Public/error.html','utf-8','text/xml');$this->show($content);3.fetch方法获得模板文件中的内容,以字符串形式返回$content=$this->fetch('Public:error');4.show方法不需要模板文件,可以直接输出模板内容$content=$this->fetch('Public:error');dump($content);$content=str_replace('h1','i',$content);$this->show($content);三、模板中的赋值(重点)//$this->assign('name','赵桐正');$this->name='赵桐正2';$this->display();四、模板替换(重点)__PUBLIC__:会被替换成当前网站的公共目录通常是/Public/__ROOT__:会替换成当前网站的地址(不含域名)__APP__:会替换成当前项目的URL地址(不含域名)__GROUP__:会替换成当前分组的URL地址(不含域名)__URL__:会替换成当前模块的URL地址(不含域名)__ACTION__:会替换成当前操作的URL地址(不含域名)__SELF__:会替换成当前的页面URL更换模板变量规则,修改配置项'TMPL_PARSE_STRING'=>array( //添加自己的模板变量规则'__CSS__'=>__ROOT__.'/Public/Css','__JS__'=>__ROOT__.'/Public/Js',------------------TEN---------------------------一、变量输出(重点)1.标量输出2.数组输出{$name[1]}{$name['k2']}{$name.k1}3.对象输出{$name:k}{$name->k}二、系统变量{$Think.get.id}三、使用函数{$name|strtoupper} 生成的编译后文件是<?php echo (strtoupper($name)); ?>{$name|date='Y m d H:i:s',###}四、默认值{$name|default='这里是默认值'}五、运算符{$name++}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动加载优先级, 上 => 下 高 => 低 类名 行为类 规则 说明 规则1 搜索系统类库目录下面的Behavior目录
规则2 搜索系统扩展目录下面的Behavior目录
规则3 搜索应用类库目录下面的Behavior目录 规则4 如果启用了模式扩展,则搜索模式扩展目录下面的Behavior目录
模型类 规则1 如果启用分组,则搜索应用类库目录的Model/当前分组 目录 规则2 搜索应用类库下面的Model目录
使用PDO 'DB_TYPE' => 'pdo', 'DB_DSN' => 'pdo的dsn', 给$connection 属性赋值, 可以自定义数据库连接信息,中有一些验证功能 data(), 没有验证, 只是简单的赋值.
字段映射 表单名 => 数据库字段 连贯操作 $User->where('status=1')->order('create_time')->limit(10)->select(); 下面这样也行, 等同上面. $User->select(array('order'=>'create_time','where'=>'status=
URL大小写 'URL_CASE_INSENSITIVE' =>true 区分大小写时, 在URL中按文件名大小写来定 有类为 UserType 区分大小写时, URL为: UserType 不区分大小写, URL为: user_type
跨模块调用 $user = A( 'Admin://Tool/User' ) Admin项目的Tool分组的User模块 如果启用分组, 要把分组名给写上, 不然, 貌似不好使啊.
规则3 搜索系统扩展目录下面的Model目录
控制器类 规则1 如果启用分组,则搜索应用类库目录的Action/当前分组 目录 规则2 搜索项目类库目录下面的Action目录
规则3 搜索系统扩展目录下面的Action目录
自定义路径自动加载 'APP_AUTOLOAD_PATH' =>'@.Common,@.Tool', 分组: 项目目录 公共目录 (Common)
参数绑定 在方法中, 可以指定形参数, 这样在程序执行时, 会直接把浏览器传递过来的参数给方法 .
多层控制器, 控制器分层 在TP中, 看着以Actoin结尾实在不爽, 改造, 必须改造 在Common/common.php中, import( '@.Common.Controller' ); 在项目目录下面建一个Common/Controller.class.php 内容为: class Controller extends Action {}
2月3日, TP自学
2013年2月3日 星期日 16:19
类文件都是以.class.php为后缀 在调试模式下面,即使在Windows平台也会严格检查大小写 类名和文件名一致 数据表和字段采用小写加下划线方式命名
行为: 到底是什么? 行为可以说是一个中间接口, 行为中保存了行为的名字, 和这个名字相对应的操作, 当准备执行这个行为的时候, 举例如下: class Behavior { static $callStaticMap = array( 'checkLogin' => 'CheckLoginBehavior' );
用于对查询的group支持 用于对查询的having支持
字符串和数字
字符串 字符串
join* union* lock cache
用于对查询的join支持 用于对查询的union支持 用于数据库的锁机制 用于查询缓存
字符串和数组 字符串、数组和对象
布尔值
distinct 用于查询的distinct支持
URL路由 在项目配置文件中设置, 在分组配置文件中貌似不好使 例如: 'Home/Abc/:m/:a' => 'Home/:1/:2' :1 = :m :2 = :a 正则路由比较不错的说. 在这儿发现PHP正则的一个用法 e 模式
URL生成 在模板中是 {:U( 参数 )} 域名使用: U( 'Blog/read@?username=xxx' );
分区 学习PHP 的第 5 页
$User->select(array('order'=>'create_time','where'=>'status= 1','limit'=>'10')); 连贯操作 作用 支持的参数类型
where table
alias data
用于查询或者更新条件的定义 用于定义要操作的数据表名称(真表名)
惯例配置->项目配置->调试配置->分组配置->扩展配置->动态配置 以上是配置文件的加载顺序,因为后面的配置会覆盖之前的同名配置
配置参数不区分大小写(因为无论大小写定义都会转换成小写) 需要注意的是,二级参数配置区分大小写,也就说读取确保和定义一致。
注意在地址栏中输入控制名的时候的大小写 , 要和文件名的大小写一致.
用于给当前数据表定义别名
字符串、数组和对象 字符串和数组
字符串
用于新增或者更新数据之前的数据对象赋值 数组和对象
field
order limit
用于定义要查询的字段(2参为字段排除) 字符串和数组
用于对结果排序 用于限制查询结果数量 字符串和数组 字符串和数字
page
group having
用于查询分页(内部会转换成limit)
真是麻烦, 把文件名命名规则直接改成全小写, 不就行了, ?还用得着这么麻烦么 想出英文字母区分大小写的人, 真是脑袋被驴踢了.
获得超全局变量 $this -> _get( 名字, 过滤器 ); 这个方法的好处是能过滤数据
分区 学习PHP 的第 4 页
这个方法的好处是能过滤数据 过滤器不写, 会使用 DEFAULT_FILTER 过滤器为false, 不过滤.
2. 'USER' => 'user', //用户配置 3. 'DB' => 'db', //数据库配置 4. ), //加载扩展配置文件 C('ER_AUTH_ID');
单字母大写方法:
A($p) <==> new ($p . Action) ()
B C D
F G
执行行为, 具体意思是? Config 快速实例化自定义模型, 第一参数是表名, 第二参数是 类后缀名, 默认为Model
配置目录 (Conf) Action目录
分组(以Home和Admin分组为例)
不分组
Common/common.php Home分组:Common/Home/function.php Admin分组:Common/Admin/function.php 公共文件:Common/common.php
Home分组:Conf/Home/config.php Admin分组:Conf/Admin/config.php 公共配置:Conf/config.php Home分组:Lib/Action/Home/ Admin分组:Lib/Action/Admin/ 公共Action:Lib/Action/ Conf/config.php
static public function __callStatic( $name, $args ) { if ( isset( self :: $callStaticMap [ $name ] ) ) { $object = new self :: $callStaticMap[ $name ]; call_user_func_array( $object, $args ); } } }
布尔值 支持多个参数
字符串
relation 用于关联查询(需要关联模型支持)
真是他喵的没事找事, 人家Java系统本身就是用点来分隔各个包的, 一味的模仿有毛用啊, 不知道结合实际. PHP决定用\来分割命名空间, 为什么不用这个来做导入类的分割符?
分区 学习PHP 的第 2 页
导入第三方类库 vendor( '类路径.路径. ... .类名' ) 实际上还是调用import了, 不过是把第二个参数如果是空的话 替换成VENDOR常量的值
Home分组:Tpl/Home/theme/ 模板目录 Tpl theme ( 以 主题为例) Admin分组:Tpl/Admin/theme/ 运行时目录(Runtime) Home分组:Runtime/Home/ Admin分组:Runtime/Admin/
分区 学习PHP 的第 3 页
伪静态后缀 如果URL_HTML_SUFFIX为空, 那么任何后缀都可以使用, 如果配置了URL_HTML_SUFFIX的值, 那么只能使用这些配置的值. 'URL_HTML_SUFFIX'=>'(shtml|html|xml)'
Lib/Action/
Lib/Model/ Model 目录 此目录也可以分组, 分组以后, 优先使用分组目录中的类. 语言包目录 (Lang 以zh-cn为例)
Lib/Model/
Lang/zh-cn/common.php Home分组:Lang/zh-cn/Home/lang.php Admin分组:Lang/zh-cn/Admin/lang.php 公共语言包:Lang/zh-cn/common.php Tpl/theme/ Runtime/