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 的目录结构非常清晰和容易部署。大致的目录结构如下,以项目为基础进行部署。

┎━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”,文件内容如下:

  1. <?php

  2. // 本类由系统自动生成,仅供测试用途

  3. namespace Home\Controller;

  4. use Think\Controller;

  5. class IndexController extends Controller {

  6. public function Index(){

  7. $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');

  8. }

  9. }

在地址栏输入“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”函数中添加点东西,代码如下:

  1. <?php

  2. namespace Index\Controller;

  3. use Think\Controller;

  4. class IndexController extends Controller {

  5. public function index(){

  6. $this->show('//phpinfo();<br>');

  7. $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');

  8. $this->show('function index()<br>');

  9. }

  10. }

试试通过以下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 例子说明了如何定义控制器和模板 ,以及如何读取数据库的数据并在模板渲染输出。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:05月01日

热门专题

易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
中源管业|中源管业,中源管业公司,中源管业有限公司,中源管业电话,中源管业地址,中源管业电力管,中源管业mpp电力管,中源管业cpvc电力管,中源管业pe穿线管
中源管业
卓越综合高中|卓越综合高中
卓越综合高中
一年制中专|中专学历,中专是什么学历,中专是什么,中专有什么专业,中专升大专,一年制中专
一年制中专
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招
金诺幼儿园(春城路金诺幼儿园)|昆明官渡区幼儿园,幼儿园报名,官渡区幼儿园,春城路幼儿园,幼儿园招生,学前班,昆明幼儿园,金诺幼儿园,环城南路幼儿园,石井路幼儿园
金诺幼儿园(春城路金诺幼儿园)
天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法
APP开发|app开发_app开发公司_app软件开发_专业app开发_云南app开发公司_app定制_原生app开发定制
APP开发

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部