Think php快速入门 (一)

简介

ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,自2006年诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用和API开发提供了强有力的支持。

相当于以往版本,ThinkPHP5.0版本是一个颠覆和重构版本,也是ThinkPHP十周年献礼版本,基于PHP5.4设计(完美支持PHP7),采用全新的架构思想,引入了很多的PHP新特性,优化了核心,减少了依赖,支持Composer,实现了真正的惰性加载,并且为API开发做了深入的支持,在功能、性能以及灵活性方面都较为突出。

安装

ThinkPHP提供多个方式的安装,包括官网下载、Composer安装以及GIT下载。

对于新手来说,有必要理解这几种安装方式的区别:官网下载是一般都是稳定版本(并不会实时更新),有些大的版本还会提供核心版(不含扩展)和完整版(包含常用扩展)两个版本;Composer安装的学问比较多,但是一种主流的安装方式,Composer也分为稳定版和开发版安装,如果是安装的稳定版则可以update到最新的稳定版,如果是安装的开发版那么update到的也是实时的开发版,安装慢的可以使用国内镜像,但注意存在一定的缓存时间;GIT安装是直接通过git地址安装的方式,优势是可以实时更新,跟着官方开发版本走的用户可以选择GIT更新,也方便及时反馈和提交PR,除了Github之外,国内的码云和Coding代码托管平台都有ThinkPHP5的镜像,请自行选择。

官网下载

ThinkPHP最新的稳定版本可以在(官方网站下载页)下载,不过官网下载版本并不是实时更新的,我们会在每个版本更新发布的时候重新打包,如果你需要实时更新版本,请使用Git版本库或者Composer安装。

Composer安装和更新

ThinkPHP5.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 命令更新为最新版本。

由于众所周知的原因,国外的网站连接速度很慢,并且随时可能被“墙”甚至“不存在”。因此安装的时间可能会比较长,我们建议通过下面的方式使用国内镜像。

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

然后在命令行下面,切换到你的web根目录下面并执行下面的命令: 

composer create-project topthink/think tp5  --prefer-dist

如果出现错误提示,请根据提示操作或者参考Composer中文文档

如果之前使用Composer安装的话,首先切换到你的tp5目录,然后使用下面的命令更新框架到最新版本(注意因为缓存关系,composer不一定是及时更新的):

composer update

注意:


使用composer update更新核心框架会清空原来的核心框架目录,如果你定制了核心框架或者添加了扩展在核心目录的话,建议使用后面的Git方式更新。

Git下载和更新

ThinkPHP使用Git版本库进行更新迭代,如果你不太了解Composer或者觉得Composer太慢,也可以使用git版本库安装和更新,ThinkPHP5.0拆分为多个仓库,下面是github(主要维护仓库)及国内的仓库地址:

[ 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.0Git方式下载,如果需要更新核心框架的时候,只需要切换到thinkphp核心目录下面,然后执行:

git pull https://github.com/top-think/framework

如果不熟悉git命令行,可以使用任何一个GIT客户端进行操作,在此不再详细说明。

Github上还给新手提供了包含了常用扩展的完整版,可以免去composer安装的烦恼,下载地址:https://github.com/top-think/think/tree/archive

GIT方式只能安装核心框架,官方扩展只能通过Composer安装。

目录结构

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/extend应用扩展目录EXTEND_PATH
tp5/vendorComposer扩展目录VENDOR_PATH

核心框架目录的结构如下:

├─thinkphp 框架系统目录
│  ├─lang               语言包目录
│  ├─library            框架核心类库目录
│  │  ├─think           think 类库包目录
│  │  └─traits          系统 traits 目录
│  ├─tpl                系统模板目录
│  │
│  ├─.htaccess          用于 apache 的重写
│  ├─.travis.yml        CI 定义文件
│  ├─base.php           框架基础文件
│  ├─composer.json      composer 定义文件
│  ├─console.php        控制台入口文件
│  ├─convention.php     惯例配置文件
│  ├─helper.php         助手函数文件(可选)
│  ├─LICENSE.txt        授权说明文件
│  ├─phpunit.xml        单元测试配置文件
│  ├─README.md          README 文件
│  └─start.php          框架引导文件

运行环境

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

如果提示错误,请检查你的php.exe所在路径是否已经加入系统环境变量Path

接下来可以直接访问

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/

运行后我们会看到欢迎页面:

官方提供的默认应用的实际目录结构和说明如下:

├─application           应用目录(可设置)
│  ├─index              模块目录(可更改)
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块公共文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  └─view            视图目录
│  │
│  ├─command.php        命令行工具配置文件
│  ├─common.php         应用公共文件
│  ├─config.php         应用配置文件
│  ├─tags.php           应用行为扩展定义文件
│  ├─database.php       数据库配置文件
│  └─route.php          路由配置文件

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进行访问,如果你使用了其它的方式请自行修改。

资源访问

网站的资源文件访问不会影响正常的操作访问,只有当访问的资源文件不存在的时候才会解析到入口文件,一般就会提示模块不存在的错误。

网站的资源文件一般放入public目录的子目录下面,例如下面是一个建议规范:

public
├─index.php       应用入口文件
├─static                静态资源目录   
│  ├─css      样式目录
│  ├─js         脚本目录
│  └─img      图像目录

记住,千万不要在public目录之外的任何位置放置资源文件,包括application目录。

访问资源文件的URL路径是:

http://tp5.com/static/css/style.css
http://tp5.com/static/js/common.js
http://tp5.com/static/img/picture.jpg

如果你没有设置域名绑定,而是使用子目录方式访问的话,那么可能的资源访问地址是:

http://localhost/public/static/css/style.css
http://localhost/public/static/js/common.js
http://localhost/public/static/img/picture.jpg

网站的入口文件就是资源文件的起始位置,如果你的入口文件不是在public目录下面的话,还需要自行调整。
如果不清楚当前的入口文件位置,可以使用phpinfo()在页面输出中查看DOCUMENT_ROOT的值。

调试模式

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!的输出结果。

如果要访问一个驼峰命名的控制器,例如我们把上面的例子改成一个HelloWorld控制器。

<?php

namespace app\index\controller;

class HelloWorld
{
    public function index($name = 'World')
    {
        return 'Hello,' . $name . '!';
    }
}

默认情况下正确的方法是使用下面的URL进行访问

http://tp5.com/index.php/index/hello_world

下面的访问地址是错误的

http://tp5.com/index.php/index/HelloWorld

因为默认的URL访问是不区分大小写的,全部都会转换为小写的控制器名,除非你在应用配置文件中,设置了关闭url自动转换如下:

'url_convert' => false,

那么就可以正常访问

http://tp5.com/index.php/index/HelloWorld

如果要继承一个公共的控制器类,可以使用:

<?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

当我们访问hello2hello3操作方法后的结果都会显示类似的异常信息:

异常页面包含了详细的错误信息,是因为开启了调试模式,如果关闭调试模式的话,看到的默认信息如下:

视图

现在我们在给控制器添加视图文件功能,我们在application/index目录下面创建一个view目录,然后添加模板文件view/index/hello.html(注意大小写),我们添加模板内容如下:

<html>
<head>
<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类之后,我们可以直接使用封装好的assignfetch方法进行模板变量赋值和渲染输出。

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();
        $this->assign('result', $data);
        return $this->fetch();
    }
}

定义好控制器后,我们修改模板文件,添加数据输出标签如下:

<html>
<head>
<title></title>
</head>
<body>
{$result.id}--{$result.data}
</body>
</html>

模板标签的用法和Smarty类似,就是用于输出数据的字段,这里就表示输出think_data表的iddata字段的值。

我们访问会输出:

1--thinkphp

总结

本章我们学习了如何安装ThinkPHP和框架的目录结构,如何创建项目的入口文件和开启调试模式,并通过一个Hello,Name例子说明了如何定义控制器和模板,以及如何读取数据库的数据并在模板渲染输出。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值