thinkphp框架相关研究(一)
2015-01-05 17:28 pengfengting~ 阅读(600) 评论(0) 编辑 收藏 举报小编最近开始正式研究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\' => \'3306\', \'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\' => \'3306\', \'DB_PREFIX\' => \'think_\',//数据库表名前缀 ); ?>
可以在应用配置中如下写入:
<?php $arr1=array( //\'配置项\'=>\'配置值\' \'URL_MODEL\' =>1,//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\', \'标题内容过长\', 0, \'callback\'), array(\'message\', \'require\', \'文章内容必须非空\'), ); //字段长度验证回调函数(ThinkPHP会自动帮我们传递参数) function callback_checklen($data){ if(strlen($data)>200){ return false; } return true; } //自动完成,在create时自动执行 //array(\'填充字段\',\'填充内容\',\'填充条件\',\'附加规则\'); //填充字段 protected $_auto=array( array(\'createtime\',\'time\',1,\'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=\'\';//如果你使用的不是配置的数据库,可以更改数据库 }
未完待续...........