ThinkPHP5快速入门基础
一、基础
快速入门 ( 一 ) :基础
本章介绍了 ThinkPHP5 .0 的安装及基本使用 ,并给出了一个最简单的示例带你了解如何开始开发 ,主要包 含 :
简介
官网下载
omposer安装和更新C
Git下载和更新
目录结构
运行环境
入口文件
调试模式
控制器
视图
读取数据
总结
在学习 ThinkPHP5.0 之前 ,如果你还不理解面向对象和命名空间的概念 ,建议首先去PHP手册恶补下 PHP的相关基础知识 ,否则将成为你学习5.0的最大障碍。
简介
ThinkPHP 是一个快速、简单的基于 MVC 和面向对象的轻量级 PHP 开发框架 ,遵循 Apache2 开源协议发 布 ,从诞生以来一直秉承简洁实用的设计原则 ,在保持出色的性能和至简的代码的同时 ,尤其注重开发体验 和易用性 ,并且拥有众多的原创功能和特性 ,为 WEB 应用和 API 开发提供了强有力的支持。
ThinkPHP5 .0 版本是一个颠覆和重构版本 ,也是 ThinkPHP 十周年献礼版本 ,基于 PHP5 .4 设计 ( 完 美支持 PHP7 ) ,采用全新的架构思想 ,引入了很多的 PHP 新特性 ,优化了核心 ,减少了依赖 ,支持
Composer ,实现了真正的惰性加载 ,并且为 API 开发做了深入的支持 ,在功能、性能以及灵活性方面 都较为突出。
官网下载
ThinkPHP最新的稳定版本可以在 ( 官方网站下载页 ) 下载 ,不过官网下载版本并不是实时更新的 ,我们会在 每个版本更新发布的时候重新打包 ,如果你需要实时更新版本 ,请使用 Git 版本库或者 Composer 安装。
Composer安装和更新
ThinkPHP 5 .0 支持使用 Composer 安装和更新 ,如果还没有安装 Composer ,你可以按 Composer安 装 中的方法安装。在 Linux 和 Mac OS X 中可以运行如下命令 :
本文档使用 看云 构建
一、基础
curl -sS https://getcomposer .org/installer | php
mv composer .phar /usr/local/bin/composer
在 Windows 中 ,你需要下载并运行 Composer-Setup.exe。
提示 :
如果遇到任何问题或者想更深入地学习 Composer ,请参考 Composer 官方文档(英文) ,看云上有 Composer 的中文版本。
如果你已经安装有 Composer 请确保使用的是最新版本 ,或者可以用 composer self-update 命令更 新为最新版本。
然后在命令行下面 ,切换到你的web根目录下面并执行下面的命令 :
composer create-project topthink/think tp5 --prefer-dist
如果出现错误提示 ,请根据提示操作或者参考omposer中文文档C。
如果之前使用 Composer 安装的话 ,首先切换到你的 tp5 目录 ,然后使用下面的命令更新框架到最新版本 ( 注意因为缓存关系 , composer 不一定是及时更新的 ) :
composer update
注意 :
使用composer update更新核心框架会清空原来的核心框架目录 ,如果你定制了核心框架或者添加了扩展 在核心目录的话 ,建议使用后面的Git方式更新。
由于众所周知的原因 ,国外的网站连接速度很慢 ,并且随时可能被“墙”甚至“不存在”。 因此安装的时间可能会 比较长 ,请耐心等待 ,或者通过下面的方式使用国内镜像。
打开命令行窗口 ( windows用户 ) 或控制台 ( Linux、 Mac 用户 ) 并执行如下命令 :
composer config -g repo .packagist composer https://packagist .phpcomposer .com
Git下载和更新
ThinkPHP 使用 Git 版本库进行更新 ,如果你不太了解 Composer 或者觉得 Composer 太慢 ,也可以使 用 git 版本库安装和更新 , ThinkPHP5 .0 拆分为多个仓库 ,下面是github及国内的仓库地址 ( 官方扩展只 能通过Composer安装 ) :
一、基础
[ Github ]
应用项目 : https://github .com/top-think/think
核心框架 : https://github .com/top-think/framework
[ 码云 ]
应用项目 : https://git .oschina .net/liu21st/thinkphp5 .git
核心框架 : https://git .oschina .net/liu21st/framework .git
[ Coding ]
应用项目 : https://git .coding .net/liu21st/thinkphp5 .git
核心框架 : https://git .coding .net/liu21st/framework .git
提示 :
之所以设计为应用和核心仓库分离 ,是为了支持 Composer 单独更新核心框架。
如果你还没安装 Git ,可以参考阅读 Pro Git第二版(中文)先。
首先克隆下载应用项目仓库
git clone https://github .com/top-think/think tp5
然后切换到 tp5 目录下面 ,再克隆核心框架仓库 :
git clone https://github .com/top-think/framework thinkphp
两个仓库克隆完成后 ,就完成了 ThinkPHP5 .0 的 Git 方式下载 ,如果需要更新核心框架的时候 ,只需要 切换到thinkphp核心目录下面 ,然后执行 :
git pull https://github .com/top-think/framework
如果不熟悉 git 命令行 ,可以使用任何一个 GIT 客户端进行操作 ,在此不再详细说明。
目录结构
Composer
安装后 ( 或者下载后的压缩文件解压后 ) 可以看到下面的目录结构 :
tp5
├─application 应用目录
├─extend 扩展类库目录 (可定义)
├─public 网站对外访问目录
├─runtime 运行时目录 (可定义)
├─vendor 第三方类库目录 (Composer)
├─thinkphp 框架核心目录
├─build .php 自动生成定义文件 (参考)
├─composer .json Composer定义文件
├─LICENSE .txt 授权说明文件
├─README.md README 文件
├─think 命令行工具入口
注意 :
如果在linux环境下面的话 ,需要给 runtime 目录 755 权限。
有几个关键的路径先了解下 : | 目录 | 说明 | 常量 |
tp5 | 项目根目录 | ROOT_PATH | |
tp5/application | 应用目录 | APP_PATH | |
tp5/thinkphp | 框架核心目录 | THINK_PATH | |
tp5/exend | 应用扩展目录 | EXTEND_PATH | |
tp5/vendor | Composer扩展目录 | VENDOR_PATH |
核心框架目录的结构如下 :
目录对应关系
F:\\PHP├─index.php 入口文件├─README.md README文件├─Application 应用目录├─Public 资源文件目录└─ThinkPHP 框架目录
┎━ThinkPHP 框架系统目录┃ ┝ ThinkPHP.php 系统公共文件┃ ┝ Common 公共文件目录┃ ┝ Tpl 框架系统模版目录┃ ┝ Lang 系统语言包目录┃ ┝ PlugIns 公共插件目录┃ ┗ Lib 系统基类库目录┃ ┝ Think 系统运行库(必须)┃ ┝ Com 扩展类库包(非必须)┃ ┗ ORG 扩展类库包(非必须) ┃┝━Application 应用目录、项目目录┃ ┝ index.php 项目入口文件(可任意放置)┃ ┝ Cache 模版缓存目录┃ ┝ Common 公共文件目录(非必须)┃ ┝ Conf 项目配置目录┃ ┝ Data 项目数据目录┃ ┝ Html 静态文件目录(非必须)┃ ┝ PlugIns 插件目录(非必须)┃ ┝ Tpl 模版文件目录┃ ┝ Lang 语言包目录(非必须)┃ ┝ Logs 日志文件目录┃ ┝ Temp 数据缓存目录┃ ┗ Lib 应用类库目录┃ ┝ Action 控制器(模块)类目录┃ ┝ Model Model 类文件目录┃ … 下面的应用目录可根据需要选择和定义┃ ┝ Exception 异常类库目录┃ ┝ Common 公共应用类目录┃ ┗ Help 助手类目录┃┃…更多项目目录(和App 目录类似,每个项目采用独立目录,便于部署)┃┝━Public 网站公共目录(多项目公用)┃ ┝ Js JS 类库目录(建议)┃ ┝ Images 公共图像目录(建议)┃ ┗ Uploads 公共上传目录(建议)
我的“F:\PHP\Application”目录下有个“home”目录,这是ThinkPHP自动生成的一个控制器,
主要文件是“F:\PHP\Application\Home\Controller\IndexController.class.php”,文件内容如下:
<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function Index(){
$this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');
}
}
在地址栏输入“http://localhost/index.php”,回车,看到的内容,就是这个文件中“Index”函数中的内容。
访问规则
就“home”目录下的控制器举例,您可以通过以下URL地址访问:
http://localhost/index.php
http://localhost/index.php/Home
http://localhost/index.php/Home/Index
http://localhost/index.php/Home/Index/Index
创建第一个控制器
在“F:\PHP\Application”目录下新建一个目录“Index”,偷个赖,把“F:\PHP\Application\Home”目录下的内容都复制
到“F:\PHP\Application\Index”目录下,打开“F:\PHP\Application\Index\Controller\IndexController.class.php”文件,
为了确定访问的确实是我们新加的内容,在“Index”函数中添加点东西,代码如下:
<?php
namespace Index\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
$this->show('//phpinfo();<br>');
$this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP aaaa</b>!</p></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');
$this->show('function index()<br>');
}
}
试试通过以下URL地址访问吧:http://localhost/index.php/Index
http://localhost/index.php/Index/Index
http://localhost/index.php/Index/Index/Index
修改惯例配置
ThinkPHP的默认模块名称是“Home”,也就是说如果你在浏览器地址栏中输入“http://localhost/index.php”的话,默认访问的是“http://localhost/index.php/Home”。
修改方法:用文本编辑工具打开“F:\PHP\ThinkPHP\Conf\convention.php”文件,
修改第44行为:'DEFAULT_MODULE' => 'Index', // 默认模块
注意:应用的目录只能是首字母大写后面全部小写,使用“WorkOvertime”结果就出现无法加载控制器的情况!改为“Workovertime”之后,还需要关闭之前的窗口,重新打开一个浏览器窗口访问才能正常!
运行环境
ThinkPHP5的环境要求如下 :
PHP >= 5.4.0 ( 完美支持PHP7 )
PDO PHP Extension
MBstring PHP Extension
CURL PHP Extension
在开始之前 ,你需要一个 Web 服务器和 PHP5.4+ 运行环境 ,如果你暂时还没有 ,我们推荐使用集成开发环 境WAMPServer ( Windows系统下集成Apache、 PHP和MySQL的服务套件 ) 来使用 ThinkPHP 进行本地开
发和测试 ,最新版本的WAMP在这里下载。
如果你不想安装任何 WEB 服务器 ,也可以直接使用PHP自带的 WebServer ,并且运行 router .php 来运 行测试。
我们进入命令行 ,进入 tp5/public 目录后 ,输入如下命令 :
php -S localhost :8888 router .php
接下来可以直接访问
http ://localhost :8888
注意 : S 一定要大写 ,端口号可以随意设置 ,只要和已有的不冲突 ,如果要停止服务 ,直接在命令行下面 按 CTRL+C 即可退出。
入口文件
ThinkPHP5 .0 版本的默认自带的入口文件位于 public/index .php ( 实际部署的时候 public 目录为 你的应用对外访问目录 ) ,入口文件内容如下 :
// 定义应用目录
define( 'APP_PATH ', __DIR__ . '/ . ./application/ ');
// 加载框架引导文件
require __DIR__ . '/ . ./thinkphp/start .php ';
这段代码的作用就是定义应用目录 APP_PATH 和加载 ThinkPHP 框架的入口文件 ,这是所有基于
ThinkPHP 开发应用的第一步。
我们可以在浏览器中访问入口文件
http://localhost/tp5/public/
运行后我们会看到欢迎页面 :
5.0版本采用模块化的设计架构 ,默认的应用目录下面只有一个 index 模块目录 ,如果我要添加新的模块可 以使用控制台命令来生成。
切换到命令行模式下 ,进入到应用根目录并执行如下指令 :
php think build --module demo
就会生成一个默认的demo模块 ,包括如下目录结构 :
├─demo
│ ├─controller 控制器目录
│ ├─model 模型目录
│ ├─view 视图目录
│ ├─config .php 模块配置文件
│ └─common .php 模块公共文件
同时也会生成一个默认的 Index 控制器文件。
注意 :这只是一个初始默认的目录结构 ,在实际的开发过程中可能需要创建更多的目录和文件。
在后面的示例中 ,为了方便访问 ,我们设置 vhost 访问 ,以 apache 为例的话定义如下 :
<VirtualHost * :80>
DocumentRoot "/home/www/tp5/public"
ServerName tp5 .com
</VirtualHost>
把 DocumentRoot 修改为你本机 tp5/public 所在目录 ,并注意修改本机的 hosts 文件把 tp5 .com 指向本地 127 .0 .0 .1 。
如果你暂时不想设置 vhost 或者还不是特别了解如何设置 ,可以先把入口文件移动到框架的 ROOT_PATH
目录 ,并更改入口文件中的 APP_PATH 和框架入口文件的位置 ( 这里顺便展示下如何更改相关目录名称 ) , index .php 文件内容如下 :
// 定义应用目录为apps
define( 'APP_PATH ', __DIR__ . '/apps/ ');
// 加载框架引导文件
require __DIR__ . '/think/start .php ';
这样最终的应用目录结构如下 :
tp5
├─index .php
├─apps
├─public
├─runtime
└─think
应用入口文件
应用目录
资源文件目录
运行时目录
框架目录
实际的访问URL变成了
http://localhost/tp5/
提示 :
如非特别说明 ,我们后面的示例均以 tp5 .com 进行访问 ,如果你使用了其它的方式请自行修改。
调试模式
ThinkPHP 支持调试模式 ,默认情况下是开启状态。调试模式以除错方便优先 ,而且在异常的时候可以显示 尽可能多的信息 ,所以对性能有一定的影响。
我们强烈建议开发者在使用 ThinkPHP 开发的过程中使用调试模式 , 5 .0 默认情况下可以捕获到任何细微
的错误并抛出异常 ,这样可以更好的获取错误提示和避免一些问题和隐患。
开发完成后 ,我们实际进行项目部署的时候 ,修改应用配置文件 ( application/config .php ) 中的 app_debug 配置参数 :
// 关闭调试模式
'app_debug ' => false,
为了安全考虑 ,避免泄露你的服务器WEB目录信息等资料 ,一定记得正式部署的时候关闭调试模式。
控制器
我们找到 index 模块的 Index 控制器 ( 文件位于 application/index/controller/Index .php 注 意大小写 ) ,我们把 Index 控制器类的 index 方法修改为 Hello,World! 。
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return 'Hello,World! ';
}
}
提示 :
根据类的命名空间可以快速定位文件位置 ,在 ThinkPHP5 .0 的规范里面 ,命名空间其实对应了文件的所 在目录 , app 命名空间通常代表了文件的起始目录为 application ,而 think 命名空间则代表了文 件的其实目录为 thinkphp/library/think ,后面的命名空间则表示从起始目录开始的子目录。
我们访问URL地址
http://tp5.com
就会看到 Hello,World! 的输出结果。
如果要继承一个公共的控制器类 ,可以使用 :
<?php
namespace app\index\controller;
use app\index\controller\Base;
class Index extends Base
{
public function index()
{
return 'Hello,World! ';
}
}
可以为操作方法定义参数 ,例如 :
<?php
namespace app\index\controller;
class Index
{
public function index($name = 'World ')
{
return 'Hello, ' . $name . '! ';
}
}
当我们带 name 参数访问入口文件地址 ( 例如 http://tp5 .com?name=ThinkPHP ) 的时候 ,在浏览器 中可以看到如下输出 :
Hello,ThinkPHP!
控制器类可以包括多个操作方法 ,但如果你的操作方法是 protected 或者 private 类型的话 ,是无法直
接通过URL访问到该操作的 ,也就是说只有 public 类型的操作才是可以通过URL访问的。 我们来验证下 ,把 Index 控制器类的方法修改为 :
<?php
namespace app\index\controller;
class Index
{
public function hello()
{
return 'hello,thinkphp ! ';
}
public function test()
{
return '这是一个测试方法! ';
}
protected function hello2()
{
return '只是protected方法 ! ';
}
private function hello3()
{
return '这是private方法 ! ';
}
}
当我们访问如下URL地址的时候 ,前面两个是正常访问 ,后面两个则会显示异常。
http://tp5.com/index.php/index/index/hello
http://tp5.com/index.php/index/index/test
http://tp5.com/index.php/index/index/hello2
http://tp5.com/index.php/index/index/hello3
当我们访问 hello2 和 hello3 操作方法后的结果都会显示类似的异常信息 :
异常页面包含了详细的错误信息 ,是因为开启了调试模式 ,如果关闭调试模式的话 ,看到的默认信息如下 :
视图
现在我们在给控制器添加视图文件功能 ,我们在 application/index 目录下面创建一个 view 目录 ,然 后添加模板文件 view/index/hello .html ,我们添加模板内容如下 :
<html>
<head>
本文档使用 看云 构建
- 14 -
一、基础
<title>hello {$name}</title>
</head>
<body>
hello, {$name} !
</body>
</html>
要输出视图 ,必须在控制器方法中进行模板渲染输出操作 ,现在修改控制器类如下 :
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function hello($name = 'thinkphp ')
{
$this->assign( 'name ', $name);
return $this->fetch();
}
}
[ 新手须知 ]
这里使用了 use 来导入一个命名空间的类库 ,然后可以在当前文件中直接使用该别名而不需要使用完整 的命名空间路径访问类库。也就说 ,如果没有使用
use think\Controller;
就必须使用
class Index extends \think\Controller
这种完整命名空间方式。
在后面的内容中 ,如果我们直接调用系统的某个类的话 ,都会假设已经在类的开头使用 use 进行了别名 导入。
注意 , Index 控制器类继承了 think\Controller 类之后 ,我们可以直接使用封装好的 assign 和 fetch 方法进行模板变量赋值和渲染输出。
fetch 方法中我们没有指定任何模板 ,所以按照系统默认的规则 (视图目录/控制器/操作方法 ) 输出了 view/index/hello .html 模板文件。
接下来 ,我们在浏览器访问
http://tp5.com/index.php/index/index/hello
一、基础
输出 :
hello,thinkphp !
读取数据
在开始之前 ,我们首先在数据库 demo 中创建一个 think_data 数据表 ( 这里以 mysql 数据库为例 ) :
CREATE TABLE IF NOT EXISTS `think_data`(
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`data` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
INSERT INTO `think_data`(`id`,`data`) VALUES
(1, 'thinkphp '),
(2, 'php '),
(3, 'framework ');
首先我们需要在应用的数据库配置文件 application/database .php 中添加数据库的连接信息如下 :
return [
// 数据库类型
'type ' => 'mysql ',
// 服务器地址
'hostname ' => '127 .0 .0 .1 ',
// 数据库名
'database ' => 'demo ',
// 数据库用户名
'username ' => 'root ',
// 数据库密码
'password ' => ' ',
// 数据库连接端口
'hostport ' => ' ',
// 数据库连接参数
'params ' => [],
// 数据库编码默认采用utf8
'charset ' => 'utf8 ',
// 数据库表前缀
'prefix ' => 'think_ ',
// 数据库调试模式
'debug ' => true,
];
接下来 ,我们修改下控制器方法 ,添加读取数据的代码 :
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index()
{
$data = Db : :name( 'data ')->find();
本文档使用 看云 构建
- 16 -
一、基础
$this->assign( 'result ', $data);
return $this->fetch();
}
}
定义好控制器后 ,我们修改模板文件 ,添加数据输出标签如下 :
<html>
<head>
<title></title>
</head>
<body>
{$result.id}--{$result.data}
</body>
</html>
模板标签的用法和 Smarty 类似 ,就是用于输出数据的字段 ,这里就表示输出 think_data 表的 id 和
data 字段的值。
我们访问会输出 :
1--thinkphp
总结
本章我们学习了如何安装 ThinkPHP 和框架的目录结构 ,如何创建项目的入口文件和开启调试模式 ,并通过 一个 Hello,Name 例子说明了如何定义控制器和模板 ,以及如何读取数据库的数据并在模板渲染输出。
发表评论 取消回复