掌握Thinkphp3.2.0----模型初步
1.为什么要学习框架?框架是什么?
简单的说就是为了简单,提高开发的效率。至于什么是框架(一种规范),现在的我还不是很理解,容后再议。
学习框架最重要的就是遵循,按照开发者的意图来使用该框架。
2.thinkPHP是单入口的MVC框架。单入口不是一个个入口文件,而是一个模块对应一个入口文件。
入口文件的绑定:
$_GET['m']='模型名称';
$_GET['c']='控制器名称';
这是thinkPHP3.2.0中的绑定方式,其他版本可能有着不同的绑定方式
3.模块化设计。
在同一个应用目录下不一定就一个HOME或其他的模块,我们可以定义若干个模块。不同的模块之间是相互独立的,每一个模块都是一个‘小的MVC’。
如何定义新的模块:复制HOME模块(为了方便建立相同的目录结构和必要文件),更改相应的namespace即可。之后可以绑定入口文件,以便进行访问。
模块访问控制:
// 允许访问的模块列表
'MODULE_ALLOW_LIST' => array('Home','Admin','User');
'DEFAULT_MODULE' => 'Home', // 默认模块
// 设置禁止访问的模块列表
'MODULE_DENY_LIST' => array('Common','Runtime','User'),
4.URL模式。
默认是PATHINFO(1)模式:index.php/模块/控制器/方法/参数
可以更改'/'->'_或其他':
'URL_PATHINFO_DEPR'=>'_'
普通模式(0): index.php?m=模块&c=控制器&a=方法&参数列表
可以更改键值
//修改键名称
'VAR_MODULE' => 'mm',
'VAR_CONTROLLER' => 'cc',
'VAR_ACTION' => 'aa',
重写模式:省略index.php,准确的说是省略入口文件
(1)需要先开启服务器的模式(Apache为例)
httpd.conf 配置文件中加载了 mod_rewrite.so 模块
AllowOverride None 将 None 改为 All
(2)Apache则需要在入口文件的同级添加.htaccess文件
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
5.生成的安全文件,不管是名称还是内容都是可以修改的
6.链接数据库
(1)定义全局配置,以下连接MYSQL数据库
//数据库配置信息
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => 'thinkphp', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '123456', // 密码
'DB_PORT' => 3306, // 端口
'DB_PREFIX' => 'think_', // 数据库表前缀

'DB_DSN' => '
mysql:host=localhost;dbname=thinkphp;charset=UTF-8
'//数据库类型://用户名:密码@数据库地址:数据库端口/数据库名
(2)PDO连接MYSQL数据库
//PDO连接方式
'DB_TYPE' => 'pdo', // 数据库类型'
DB_USER' => 'root', // 用户名
'DB_PWD' => '', // 密码
'DB_PREFIX' => 'think_', // 数据库表前缀
'DB_DSN' => 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'
7.模型初步-实例化模型:模型主要是对数据库或数据表操作
(1)M()或Model基类
Model(['模型名'],['数据表前缀'],['数据库连接信息']);
三个参数都是可选的,大多数情况下,我们根本无需传入任何参数即可实例化。
| 参数 | 描述 |
|---|---|
| 模型名 | 模型的名称 和数据表前缀一起配合用于自动识别数据表名称 |
| 数据表前缀 | 当前数据表前缀 和模型名一起配合用于自动识别数据表名称 |
| 数据库连接信息 | 当前数据表的数据库连接信息 如果没有则获取配置文件中的,格式:mysql://root:123456@localhost/thinkphp |
特点:效率高
(2)D()或直接引入该模型--先寻找自定义的模型,从当前模块到公共模块,最后利用Model基类。智能,可以跨模块调用但是执行效率低
一直在测试D方法加载顺序,只因没有大写(D(User)--D(user))!!!这个问题一定要注意,并且要学会认真,听话,灵活


其实就是覆盖基类MODEL中的受保护的方法
跨模型---自己写一下胜过看千遍
D方法还可以支持跨模块调用,需要使用:
//实例化Admin模块的User模型
D('Admin/User');//大小写要一致
//实例化Extend扩展命名空间下的Info模型
D('Extend://Editor/Info');//不是很懂
(3)空--可以执行原生的SQL语句
//实例化空模型
$Model = new Model();
//或者使用M快捷方法是等效的
$Model = M();
//进行原生的SQL查询
$Model->query('SELECT * FROM think_user WHERE status = 1');
8.字段缓存----好多地方都是利用受保护的属性来定义的
当关闭调试模式的时候,字段缓存有效。字段缓存的作用就是提高程序访问速度。弊端就是数据不是实时的更新。
如果你在部署模式下面修改了数据表的字段信息,可能需要清空Data/_fields目录下面的缓存文件,让系统重新获取更新的数据表字段信息,否则会发生新增的字段无法写入数据库的问题。
如果不希望依赖字段缓存或者想提高性能,也可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,例如:
namespace Home\Model;
use Think\Model;
class UserModel extends Model {
protected $fields = array('id', 'username', 'email', 'age','_pk'=>'id');
}
_pk表示定义当前数据表的主键名。
除了可以设置数据表的字段之外,我们还可以定义字段的类型,用于某些验证环节。例如:
namespace Home\Model;
use Think\Model;
class UserModel extends Model {
protected $fields = array('id', 'username', 'email', 'age','_pk'=>'id','_type'=>array('id'=>'bigint','username'=>'varchar','email'=>'varchar','age'=>'int') );
}
掌握Thinkphp3.2.0----模型初步的更多相关文章
- ThinkPHP5.0框架开发--第8章 TP5.0 模型
ThinkPHP5.0框架开发--第8章 TP5.0 模型 第8章 TP5.0 模型 ================================================= 今日学习 1. ...
- 亿级消息系统的核心存储:Tablestore发布Timeline 2.0模型
背景 互联网快速发展的今天,社交类应用.消息类功能大行其道,占据了大量网络流量.大至钉钉.微信.微博.知乎,小至各类App的推送通知,消息类功能几乎成为所有应用的标配.根据场景特点,我们可以将消息类场 ...
- tp5.0 模型查询数据的返回类型,分页
一开始用painate()这个函数的时候,发现有的查询方式不能使用这个函数,由此了解到了模型查询和普通查询返回类型的不同 1.原生查询方法 Db::query("select * from ...
- ThinkPHP5.0 模型查询操作
1.获取单个数据 //取出主键为1的数据 $user = User::get(1); echo $user->name; // 使用数组查询 $user = User::get(['name' ...
- 中文预训练模型ERNIE2.0模型下载及安装
2019年7月,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基于此框架的ERNIE 2.0预训练模型, 它利用百度海量数据和飞桨(PaddlePaddle)多机多卡高效训练优 ...
- Java 小游戏 - 井字棋 v1.0 (初步完成) (2018.4.16更新)
井字棋游戏初步完成 实现功能:输入位置数据->打印棋盘->判断是否胜利->继续游戏/退出游戏 缺点:没有清屏函数 判断胜利方法太过无脑 package MYGAME; ...
- thinkphp5.0 模型的应用
<?php namespace app\admin\controller; use app\common\controller\BaseController; use think\Db;//数据 ...
- ThinkPhp5.0模型验证规则
Tp5提供了模型数据规则的验证功能,用于在数据save或者update前验证数据的有效性.Tp5提供校验规则的类为\Think\Validate,默认提供的校验规则可以查看该文件. 在Model文件中 ...
- selenium2.0的初步封装(java版本)
我们都知道, 在本地创建java项目后,引入selenium-java-2.35.0.jar selenium-support-2.35.0.jar junit-4.8.1.jar等等jar包之后 ...
随机推荐
- div内填内容
<div contenteditable="true">可以编辑里面的内容</div> 这样就可以使div想textarea一样 可以加入自动换行与over ...
- java17
1:登录注册案例(理解) 2:Set集合(理解) (1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法: ...
- 2.EasyUI学习总结(二)——easyloader分析与使用(转载)
本文转载自:http://www.cnblogs.com/haogj/archive/2013/04/22/3036685.html 使用脚本库总要加载一大堆的样式表和脚本文件,在easyui 中,除 ...
- Xcode 中的相对路径与绝对路径的相关设置
近日闲来无事,与博客园中闲荡,忽至一烟霞照耀祥瑞蒸熏松竹翠秀奇花遍开的神奇之地.如此美景,令人心生向往,故而徜徉于其中不可自拔,独乐乐不如众乐乐: iOS开发之 相对路径与绝对路径 https://d ...
- iOS之tabBar随tableView的滑动而隐藏/显现
` @property(nonatomic,assign)CGFloat historyY; #pragma mark Delegate //设置滑动的判定范围 - (void)scrollViewW ...
- mysql 分表
1.分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多. 优点:提高并发量,减小锁的粒度 缺点:代码维护成本高,相关sql都需要改动 2.分区,所有的数据还在一个表中,但物理存储数据根据一 ...
- 安天AVLTeam送福利喽~~
#福利来了# duang~duang~duang~ 安小天帮你辨别短信真伪!!! 是不是经常收到真假难辨的[疑似诈骗短信]是真的?是假的? 傻傻分不清楚 现在不用怕啦!!! 遇到这种情况,只需手机截 ...
- 拉风的服务器监控工具,随时掌握服务器动态,AgileEAS.NET SOA 平台服务器监控工具集介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- UWP webview 键盘bug,回退页面,键盘会弹一下。
最新项目发现一个关于Webview的键盘bug. 具体问题:当点击Webview 网页里面input之类的东东,输入键盘会弹出来,这个时候,按回退键,键盘会收起来,再按回退键,界面会退到前一个页面,但 ...
- Appirater -- app中提示用户为app评价的提示框
Appirater是一段你可以嵌入自己工程中的代码,在用户使用应用一段时间后会自动弹出提示用户进行评分. 使用Appirater方面,你可以简单把源代码嵌入你的app工程中,并把以下代码添加至它的委托 ...