博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
掌握Thinkphp3.2.0----模型初步
阅读量:6595 次
发布时间:2019-06-24

本文共 3313 字,大约阅读时间需要 11 分钟。

1.为什么要学习框架?框架是什么?

  简单的说就是为了简单,提高开发的效率。至于什么是框架(一种规范),现在的我还不是很理解,容后再议。

  学习框架最重要的就是遵循,按照开发者的意图来使用该框架。

2.thinkPHP是单入口的MVC框架。单入口不是一个个入口文件,而是一个模块对应一个入口文件。

  入口文件的绑定:

          $_GET['m']='模型名称';

          $_GET['c']='控制器名称';

     这是thinkPHP3.2.0中的绑定方式,其他版本可能有着不同的绑定方式

3.模块化设计。

  在同一个应用目录下不一定就一个HOME或其他的模块,我们可以定义若干个模块。不同的模块之间是相互独立的,每一个模块都是一个‘小的MVC’。

  如何定义新的模块:复制HOME模块(为了方便建立相同的目录结构和必要文件),更改相应的namespace即可。之后可以绑定入口文件,以便进行访问。

  模块访问控制:      

1 // 允许访问的模块列表2 'MODULE_ALLOW_LIST'    =>    array('Home','Admin','User');3 'DEFAULT_MODULE'       =>    'Home',  // 默认模块4 // 设置禁止访问的模块列表 5 'MODULE_DENY_LIST'      =>  array('Common','Runtime','User'),

4.URL模式。

  默认是PATHINFO(1)模式:index.php/模块/控制器/方法/参数

    可以更改'/'->'_或其他':

'URL_PATHINFO_DEPR'=>'_'

  普通模式(0): index.php?m=模块&c=控制器&a=方法&参数列表

    可以更改键值

1 //修改键名称2 'VAR_MODULE' => 'mm',3 'VAR_CONTROLLER' => 'cc',4 'VAR_ACTION' => 'aa',

  重写模式:省略index.php,准确的说是省略入口文件

        (1)需要先开启服务器的模式(Apache为例)

            httpd.conf 配置文件中加载了 mod_rewrite.so 模块

            AllowOverride None 将 None 改为 All

        (2)Apache则需要在入口文件的同级添加.htaccess文件

1 
2 RewriteEngine on 3 RewriteCond %{REQUEST_FILENAME} !-d 4 RewriteCond %{REQUEST_FILENAME} !-f 5 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]6

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_', // 数据库表前缀

  

1 '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语句

1 //实例化空模型2 $Model = new Model();3 //或者使用M快捷方法是等效的4 $Model = M();5 //进行原生的SQL查询6 $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') );}

 

转载于:https://www.cnblogs.com/zhengfengyun/p/6095989.html

你可能感兴趣的文章
BLE获取iphone mac地址的方法--【原创】
查看>>
SaaS多租户模式数据存储方案比较
查看>>
Matrix Computations 1
查看>>
Dictionary Learning
查看>>
直播:中国HBase技术社区第一届MeetUp
查看>>
网站管理系统
查看>>
Struts2文件下载
查看>>
Python 装饰器
查看>>
JavaScript中的事件委托
查看>>
字节缓存技术
查看>>
Win7下Python2.7环境安装paramiko模块
查看>>
自定义switchButton
查看>>
冒泡排序、选择排序、插入排序
查看>>
[ZOJ 4025] King of Karaoke
查看>>
JS学习专辑(7)-"类"的创建和继承
查看>>
NPOI 导出excel表格
查看>>
glBegin()使用小结
查看>>
Filebeat使用内置的mysql模块收集日志存储到ES集群并使用kibana存储
查看>>
服务器部署_linux下部署jprofiler简单备忘
查看>>
Python 面向对象
查看>>