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 ...
随机推荐
- linux(readhat) yum源安装
在安装測试环境的时候遇到了一个问题,/etc/yum/repos.d中不存在文件或目录,无法更新yum源. 解决方法: (一.配置网络yum源) 1.首先在/etc/yum/repos.d/文件夹下创 ...
- C# - 使用 List<> 泛型给GridView控件数据
创建实体模型: namespace Test.Models { public class Student { public string ID { get; set; } public string ...
- Friends
Description Mike has many friends. Here are nine of them: Alice, Bob, Carol, Dave, Eve, Frank, Glori ...
- 【ASP.NET Web API教程】2.3.4 创建Admin视图
原文:[ASP.NET Web API教程]2.3.4 创建Admin视图 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 4: ...
- 基于visual Studio2013解决面试题之0202上下排
题目
- uva 699
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #i ...
- 网络数据(socket)传输总结
环境限定:TCP/IP下的socket网络传输:C/C++开发语言,32/64位机. 目前有两种方式对数据进行传输:1)字符流形式,即将数据用字符串表示:2)结构型方式,即将数据按类型直接传输. 1) ...
- vs2008编译QT开源项目--太阳神三国杀源码分析(三) 皮肤
太阳神三国杀的界面很绚丽,界面上按钮的图标,鼠标移入移出时图标的变化,日志和聊天Widget的边框和半透明等效果,既可以通过代码来控制,也可以使用皮肤文件qss进行控制.下面我们分析一下三国杀的qss ...
- 与众不同 windows phone (22) - Device(设备)之摄像头(硬件快门, 自动对焦, 实时修改捕获视频)
原文:与众不同 windows phone (22) - Device(设备)之摄像头(硬件快门, 自动对焦, 实时修改捕获视频) [索引页][源码下载] 与众不同 windows phone (22 ...
- dokcer 运行和进入容器
<pre name="code" class="html">docker:/root# docker run -itd --name zjtest8 ...