初心者向:ThinkPHP的安装与配置初探

前言

最近在学习PHP的一个框架:ThinkPHP(下文简称TP),此文作为阶段性学习总结用,也希望对读者能有一些参考性的作用。文章主要重点为TP的配置方式的总结,同时对TP及框架作一个简单的介绍

一、关于框架与TP及其他

1.1. 框架

框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

不同的框架基本都会遵循某种特定的设计模式,而本文中将探讨的TP框架应用的就是MVC的思想。遵循MVC模式的框架通常来说都由Model(模型层), View(视图层), Controller(控制器)三个层次组合而成。视图层相当于仪器面板,透过视图层用户对控制器进行操作(实际操作时由框架内的路由器根据用户操作分析URL并选择相应的控制器,向其传递相应的操作),控制器响应操作并选择模型层的相应模型进行运算,之后再通过控制器把结果反馈到视图层上。由于框架运行原理不是本文重点,故此处暂不作详细描述。

1.2.TP

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售。

1.3.TP5:本文中将要使用的TP版本,与前作(3.x版本)有较大不同

ThinkPHP5.0版本是一个颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构,不适合原有3.2项目的升级,请慎重考虑商业项目升级,但绝对是新项目的首选(无论是WEB还是API开发)。

关于TP5的新特性请参阅TP5开发手册

二、TP5的安装环境及方法

2.1. TP5安装环境介绍
  • PHP>=5.4.0
  • PDO MbString CURL PHP Extension
  • MySQL
  • Apache或Nginx等web server服务

若想一键安装,安装wamp server即可 官网
以下操作均以安装wamp的情况为例

2.2. TP5的安装主要有三种方法:
  • GitHub 安装
  • Composer安装
  • 官网直接下载安装

笔者采取的是第三种方法,私以为也是最适合新手懒人的方法。进入TP官网首页并点击上方的下载,进入下载页面后选择TP5下载即可。下载得到的是一个压缩包,将其解压至wamp安装目录下的www目录即可。解压出来的目录应该包含以下各项:

tp目录.PNG

其中application文件夹是存放各个模块的目录,如前台使用的index模块及后台使用的admin模块(均可自己定义)等,public 通常设置为网站根目录,框架的入口文件就是放在这里。thinkphp 目录则是框架的源码目录,其中的library 目录为框架核心文件。由于大括号很难打,此处采用一张自己的笔记照片来表达其结构
笔记1.jpg

用浏览器进入wamp根目录,找到thinkphp目录下的public目录并打开
public.PNG

如果见到浏览器页面变为
index.PNG

则安装成功

三、TP5的配置原理

重用性是每个框架都会重点考虑的特性,而为了达到框架的重用性,许多应用构筑时所必须的参数都不应与业务逻辑代码混合在一起,而应该单独存放,同时使用某种方式应用到相应的位置。以数据库配置为例,不但不同开发环境下会有不同的配置,相同开发环境下不同模块、开发的不同阶段、开发者的不同工作环境都有可能不同。那TP5的配置是怎样的呢?

TP5的配置从原理上可以大致分为两部分,一部分是配置文件,另一部分是读取部分。配置文件只需要返回一个多维数组,其中key为配置名,value为配置值。以数据库配置为例

<?php
    return 
[
    'database'            => [
        // 数据库类型
        'type'            => 'mysql',
        // 数据库连接DSN配置
        'dsn'             => '',
        // 服务器地址
        'hostname'        => '127.0.0.1',
        // 数据库名
        'database'        => '',
        // 数据库用户名
        'username'        => 'root',
        // 数据库密码
        'password'        => '',
        // 数据库连接端口
        'hostport'        => '',
]
?>

这就是一段数据库的配置,只需要返回一个数组即可。当应用的其他部分,例如模型层,打算连接数据库进行操作时,相应部分就会读取这个配置文件里的数组并将里面的值(如数据库密码等)填入相应的地方。这样就实现了配置和逻辑代码分开,充分发挥了重用性,便于维护与升级。而读取部分则一部分由\think\Config类内的方法实现,一部分由应用部分的代码实现。

四、配置的具体实现

4.1. 配置路径

框架默认的配置文件存放目录为应用目录(即application目录),但是为了维护方便我们往往会另外新建一个config目录。修改路径方法如下:
在public/index文件(框架的入口文件)中新增一行:

//定义配置路径
define('CONF_PATH', __DIR__.'/../conf/');

这样框架就会从根目录下的 conf 目录里读取配置文件了,以下操作均以该路径为例

4.2.查看配置的方法

当我们进入框架的首页的时候,其实是进入了框架里index模块的 index控制器的 index方法(因此框架首页也可以通过public/index/index/index访问),而前文提到,application就是存放整个应用中的各种模块的地方。因此我们进入 application目录下的index目录, index目录下有个controller目录存放index模块的各种控制器,在里面找到 index.php 文件,修改里面index类的 index方法就可以改变首页显示内容了。想查看全部配置,只需要 dump(config()); 即可。

4.3.配置类型
  • 惯例配置:
    惯例配置就是默认配置,配置文件位于thinkphp/convention.php,如果你不需要作很大的配置改动,只需要改变这个文件里的值即可。
  • 应用配置:
    应用配置将作用于应用全局。在conf目录下新建一个config.php,在里面用前文提到的方法返回一个数组即可
  • 模块配置:
    在conf目录下新建以模块名为名的目录(例如index模块的话就在conf下新建一个index目录),并在该目录下新建config.php,在里面返回数组即可。该文件的设置将只应用在对应模块下。
  • 场景配置:
    当你在不同的工作环境,例如在公司和家里的时候,需要应用不同的配置(例如你可能会使用不同的数据库)时,就可以进行模块配置。在前文提到的应用配置文件里的数组里增加一项app_status,改变他的值就可以应用不同的配置文件。例如,当app_status的值设置为office时,框架就会自动读取配置目录(这里是conf目录)下的office.php里面的配置。
  • 扩展配置:
    这是TP5的新特性。如果你觉得conf里的配置项太多时,可以在conf下新建一个extra目录,里面的每一个文件的文件名都是一个配置项。例如,conf/extra/database.php里的配置相当于在config.php里的database项。同理你可以在各模块的配置目录里新建extra目录来达到类似效果。但是要注意的是,举例来说,当你在database.php里返回一个数组,里面是password等项,那么database项的配置会变成一个二维数组。
  • 动态配置:
    当你想在某种情况下实时配置某个配置项的时候,你可以在对应控制器的类里面写一个类构造函数,并在里面调用 config (key , value )方法。key是想改变/新增的配置项,value是配置项的值。当然,你也可以在控制器里的某个方法里面调用这个config方法来实现仅限于该方法的配置改变。
  • Config类方法与助手函数:
    Config类位于thinkphp/library/think/config.php内,里面实现了框架的配置功能。当我们想主动调用时,可以像这样直接调用$res = \think\Config::get(),也可以先use think\Config,再直接调用get等方法。
    而助手函数则是另外一种方便主动调用config类方法的途径。助手函数库位于thinkphp/helper.php,里面的函数可以直接在控制器内调用。对应如下表:
助手函数 Config类
config(key) get(key)
config(key,value) set(key,value)
config(key,value,range) set(key,value,range)
config(?key) has(key)
4.4. 配置优先级

惯例配置->应用配置->扩展配置->场景配置->模块配置->动态配置

后面的配置会覆盖前面的。但是要注意,覆盖时同一个配置项如果形式不一样就会报错。例如,当惯例配置的某配置是二维数组,而应用配置的该配置是三维数组,那就会报错。

结语及其他

以上为TP的基本配置方法,基本上可以应用大部分场景。但是除此以外,TP的配置还有很多其他方面的东西。比如说,配置一定要用数组吗?不一定。又比如说,配置的作用域该如何动态设定呢?这些都可以在TP的技术书册里找到答案。顺便一提,设置环境变量时可能出现dump显示不出来的情况,请参阅这里别问我怎么知道的【累觉不爱脸】
其他TP问题请期待后续文章如果有的话

如有谬误,欢迎捉虫

参考资料:TP的技术书册慕课及度娘

(づ。◕‿‿◕。)づ

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 这里记录的是本人学习的thinkPHP笔记官方开发手册http://document.thinkphp.cn/ma...
    远方的枫叶阅读 1,428评论 0 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 请静静等候 谁说等候一定没有结果 请细细聆听 谁说耳边只有川流的不逊 请默默关注 谁说一个人会孤独一生 天总有转晴...
    昨日不曾散阅读 236评论 1 1
  • window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www...
    流夜王阅读 563评论 0 1
  • 你永远无权决定别人的生活,过好你自己的生活! 所以,终是开卷有益。即便不与人交往,沉浸在阅读里的时光,那是沉寂的时...
    兒东Y波阅读 192评论 0 0