thinkphp框架相关研究(一)
小编最近开始正式研究thinkphp框架,在此写下研究的整个历程,从最最基本的搭建网站开始,一步步记录。希望对大家有所帮助。
1.菜鸟从下载框架到建站
参考网址:http://blog.csdn.net/ruby97/article/details/7574851
使用软件:wampServer64+Epp4+webstorm
a.在thinkphp官网下载thinkphp 3.2.2 核心版本
b.在Epp4下建立一个新项目,将下载的 thinkphp3.2.2核心版本里面的THinkphp文件夹复制到空白项目下
c.在创建的项目下添加一个新的admin.PHP(这个名字你可要自己定,不过最好别用index.php),打开文件添加如下代码
<?php
define('THINK_PATH','./fram/ThinkPHP/');//框架路径,这个主要是用来找到你的框架放置位置 我把ThinkPHP框架放在/wamp/www/phptest/fram/Thinkphp
define('APP_PATH','./admin/');//应用程序存放路径
define('APP_NAME','admin');//应用程序名称
define('APP_DEBUG',true);//是否开启调试模式
require THINK_PATH.'ThinkPHP.php'//请求显示框架里的首页
?>
d.在浏览器中输入:http://localhost/(你建立的项目名称)/admin.php,出现欢迎页面,则搭建完成,你会发现你的项目下多出如下文件夹
->thinkphptest (项目名称)
-》admin
->Common 公共模块
->Home 你所需要用的 view model controler都在这个里面定义
->Runtime 调试模块
-》fram
-》ThinkPHP 框架
2.从model及数据库的链接开始学习
参考网址:http://document.thinkphp.cn/manual_3_2.html#extend_config
1.首先来说数据库的连接配置吧
thinkphp框架里面有一系列的配置文件 惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展配置->动态配置 (优先级为从右到左)
惯例配置位置:ThinkPHP/Conf/convention.php 该配置文件在我们下载的thinkPHP框架里面,系统建议大家不要修改,保持其默认值不变,那如果我们需要设置自己的相关配置怎么办呢?
应用配置位置:Application/Common/Conf/config.php
如上面建立的项目,在admin/Common/conf/conf.php 在这里面来写相关配置信息,该文件没有配置之前样子
<?php
return array(
//'配置项'=>'配置值'
);
可以在里面进行相关配置,比如:
<?php
return array(
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => 'guestbook',//需要新建一个数据库!名字叫
'DB_USER' => 'root', //数据库用户名
'DB_PWD' => '',//数据库登录密码
'DB_PORT' => '',
'DB_PREFIX' => 'think_',//数据库表名前缀
);
?>
也可以使用扩展配置
比如 1.你在admin/Common/Conf/user.php
和admin/Common/Conf/db.php
。
可以在上述配置中加入一条:
'LOAD_EXT_CONFIG' => 'user,db'
2.如果你在其它地方创建了配置文件,可以通过以下方式来放入
// 如果在 根目录下创建了 config.inc.php 如下
<?php
return array(
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => 'guestbook',//需要新建一个数据库!名字叫
'DB_USER' => 'root', //数据库用户名
'DB_PWD' => '',//数据库登录密码
'DB_PORT' => '',
'DB_PREFIX' => 'think_',//数据库表名前缀
);
?>
可以在应用配置中如下写入:
<?php $arr1=array(
//'配置项'=>'配置值'
'URL_MODEL' =>,//path-info 模式
//'SHOW_PAGE_TRACE' =>true,
//'SHOW_RUN_TIME' =>true, //显示运行时间
//'SHOW_ADV_TIME' =>true, //显示详细的运行时间
//'SHOW_DB_TIMES'=>true,//显示数据库操作次数
//'SHOW_CACHE_TIMES'=>true,//显示缓存操作次数
//'SHOW_USE_MEM'=>true,//显示内存开销
); $arr2=include './Common/conf/config.inc.php'; //这个地方要和你的文件放置的位置一样 return array_merge($arr1,$arr2);
?>
经过上述的配置,数据库的链接配置就没有什么问题了。至于读取配置以及其他更为细节的东西,请参考3.2的开发手册:http://document.thinkphp.cn/manual_3_2.html#extend_config
2.关于model的相关学习
首先 先来一张model的代码供大家参考
<?php
class ArticleModel extends Model{ //标题自动验证
protected $_validate=array(
array('subject', 'require', '文章标题必须非空'),
array('subject', 'callback_checklen', '标题内容过长', , 'callback'),
array('message', 'require', '文章内容必须非空'),
); //字段长度验证回调函数(ThinkPHP会自动帮我们传递参数)
function callback_checklen($data){
if(strlen($data)>){
return false;
}
return true;
} //自动完成,在create时自动执行
//array('填充字段','填充内容','填充条件','附加规则');
//填充字段
protected $_auto=array(
array('createtime','time',,'function'),
);
} ?>
我想初次接触thinkphp的小伙伴们肯定和我有一样的困惑,配置里面定义了数据库的链接,model里面定义了模型,那模型和数据库的表的对应究竟是如何做的呢?
我也一直很困惑,后来查了开发手册,把我的理解写在下面,仅供大家参考:
1.模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以自动对应数据表。
命名规范:1.建立数据库表的时候要求要有前缀(可以没有,后面会说没有的解决方案)
2.模型定义class ArticleModel extends Model {} 要求去掉前缀后的表名+Model。
例如,如果你数据库有一个表 st_user 前缀为:st_ 表名为:user model命名:userModel
你肯定会问,那系统怎么知道我的前缀是什么呢?系统其实是不知道的,这个前缀需要我们在刚刚提到的admin/Common/Conf/conf.php配置文件里面,或者其他的你配置数据库的时候写的那些配置里面指明。需要添加一句 'DB_PREFIX' => 'st_',//数据库表名前缀。 若果你数据库里面的表没有前缀,务必将参数配置为空,否则会调用系统的
DB_PREFIX
。,会报错。
2.如果我们的命名规范什么的并不是和系统要求的一样,我需要用的表也不一样,那该在呢么写这个model呢?
下面让我们来认识几个参数:
属性 | 说明 |
---|---|
tablePrefix | 定义模型对应数据表的前缀,如果未定义则获取配置文件中的DB_PREFIX参数 |
tableName | 不包含表前缀的数据表名称,一般情况下默认和模型名称相同,只有当你的表名和当前的模型类的名称不同的时候才需要定义。 |
trueTableName | 包含前缀的数据表名称,也就是数据库中的实际表名,该名称无需设置,只有当上面的规则都不适用的情况或者特殊情况下才需要设置。 |
dbName | 定义模型当前对应的数据库名称,只有当你当前的模型类对应的数据库名称和配置文件不同的时候才需要定义。 |
如果我们需要使用和配置文件不一样的数据库及其表的话,可进行如下配置:
namespace Home\Model;
use Think\Model;
class CategoryModel extends Model {
protected $tablePrefix='';//如果你的数据库中的某个表没有前缀,可以设置为空
protected $tableName = 'categories';//当前你定义的Model只是CategoryModel,和实际的表不一样,可以改成这样,保证前缀是一样的,所以前缀不用写,写表名
protected $trueTableName='';//当你定的前缀和名字都和配置文件中的不一样,那就要使用真实的表名,前缀也需要写出来,即写出全名。
protected $dbName='';//如果你使用的不是配置的数据库,可以更改数据库
}
未完待续...........
thinkphp框架相关研究(一)的更多相关文章
- thinkphp框架的相关总结
参考链接地址:http://gongwen.sinaapp.com/article-205.html 1. 模板中不能使用的标签 {$content} {$i} 2. If标签 如: <if c ...
- 攻城记:Thinkphp框架的项目规划总结和踩坑经验
一.项目模块规划 1.项目分为PC端.移动端.和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin: 对应入口 ...
- React Native移动框架功能研究
React Native移动框架功能研究 此篇只研究React Native框架的功能. 一.React Natvie是什么 React Native是使用React(或者说JS)来开发原生APP的框 ...
- ThinkPHP框架的部署
1.将ThinkPHP框架的框架文件放到想要放置的地方,与创建的应用文件夹同级 2.vhost文件中设置虚拟目录 3.在hosts文件中配置 4.在应用目录中创建入口文件index.php 5.在入口 ...
- ThinkPHP框架如何修改X-Powered-By
以前用ThinkPHP框架开发了一个小网站,前几天查询页面HTTP状态发现,里面有一项: X-Powered-By: ThinkPHP 2.0 这样虽然没什么,但感觉如果别有用心的人查询会知道你是用这 ...
- 【PHP ThinkPHP框架】小bug汇总[更新]
目录结构 1.函数调用 2.绑定select下拉框数据 3.PHP查询功能 4.格式化时间和价钱 5.IF标签比较两个变量 6.eq标签比较两个变量 7.新增信息或者修改信息的自动验证和自动填充 8. ...
- ThinkPHP框架一
1.1 框架的概念 框架其实就是可重用代码的集合,框架的代码是框架架构的代码,不是业务逻辑代码,框架代码保护类.方法.函数等等,框架代码按照一定的规则组合起来就形成了框架. 1.2 不使用框架开发的时 ...
- ThinkPHP框架知识的注意点
ThinkPHP框架 访问入口文件后在application文件夹中会出现一些文件夹,其中的home文件夹是前端模块,也可以在application文件夹中新建文件夹.home文件夹模块中Conf文件 ...
- php的内置函数debug_backtrace()与get_included_files()跟踪代码调用(Thinkphp框架举例)
debug_backtrace() 在我们开发一个项目中,或者二开研究某个开源程序,需要对代码流程一步步去跟踪,来研究它的逻辑,才可以进行修改,达到我们的开发目的.php的内置函数debug_back ...
随机推荐
- 解决ORA-28000: the account is locked
原文地址:http://yanwushu.sinaapp.com/ora-28000-the-account-is-locked/ 在oracle中.连续十次尝试登陆不成功.那么此账户将会被锁定(lo ...
- JQuery - 垂直显示隐藏DIV
效果: 代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFor ...
- 如果一个Object对象可能是集合或者数组那么如何对其进行迭代
需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是集合,包括Collection和Map,也 ...
- zabbix 监控jvm
tomcat 机器配置: [root@wx03 lib]# pwd /usr/local/apache-tomcat-7.0.55/lib [root@wx03 lib]# ls -ltr *jmx* ...
- v$lock 视图访问慢解决方法
V$ 视图访问慢 --解决方法 分析:可能是有数据字典统计信息过久,造成. exec dbms_stats.gather_fixed_objects_stats; ------收集所有数据字典的fix ...
- Linux终端颜色和标题设置
Linux给人最大的享受就是可以根据个人喜好去定制令自己舒服的系统配置,像终端颜色的设置就是一个典型的例子. 图1 系统默认状态下的终端显示 在没有经过自定义配置的终端下工作久了,难免容易疲劳,因为所 ...
- 4. Qt的容器类
Qt提供来一组通用的基于模板的容器类. 一. QList类,QLinkedList类 和 QVector类 QList类.QLinkedList类和QVector类常常使用到的Q ...
- MFC 在对话框显示图片的多种方法
我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一 ...
- 可运行jar包调用exe可运行文件,子进程阻塞
背景: 须要在项目的測试工具中加入一个button,点击后直接打开某exe工具. 这个工具的功能是导入txt文件,转为excel报表输出. 无奈解析了两行之后就停止不动了,也不报错.关闭測试工具后,就 ...
- Redis Destop Manager不能访问虚拟机
虚拟机centOS中安装Redis,主机Redis Destop Manager不能访问虚拟机Redis server的解决方案 今天在学些redis的时候碰到个问题,发现主机Redis Destop ...