一.ThinkPHP介绍
1.1.什么是框架
PHP框架是许多代码的集合,这些代码是程序结构的代码(并不是业务代码),代码中有许多函数、类、功能类包,框架的代码按照一定标准组成了一个有机的功能体,这个功能体中有许多设计模式如MVC、单例、AR等。
1.2.不使用框架开发中遇到的问题
- 代码编写没有统一规范
- 程序项目生命周期非常短,不延续
- 一个小地方的修改会牵扯到全局变化,牵一发动全身
- 不能很好地满足客户各方面的需求
1.3.使用框架的好处
- 框架可以帮助我们快速、稳定、高效搭建程序系统
- 该系统由于框架的使用使得其维护性、灵活性、适应客户需求方面得到最大化的增强
- 使用框架的过程中可以使我们的精力集中在业务层面,而无需关心程序的底层架构
- 可以节省很多代码工作量
1.4.相关框架
1.4.1. zendframework
php语言公司zend发布的官方框架,有许多OOP面向对象内容,功能非常丰富,重量级框架(高级语言、功能丰富)
重量级:(1)语言级别(高级语言OOP)(2)功能丰富
轻量级:(2)语言级别(面向过程或有少许OOP)(2)功能相对较少但实用
高级语言:如java,函数对中低级语言代码的封住
中级语言:如c,是用变量,函数对中低语言代码的封住
(中低级语言):如汇编语言,比低级语言高级一点的语言,是对二进制代码的封住
低级语言:二进制代码语言
1.4.2.Yii
国人自己开发的框架,重量级框架,纯OOP框架,该框架的特点是把代码的重用性发挥到了极致。速度非常快。外企使用最多的框架之一。
该框架思想来源于symfony、jquery等。
作者之前是prado框架的核心维护人员,维护该框架3年之久。
1.4.3.cakephp
cakephp是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该框架的主要目标是让各种层次的PHP开发人员能快速灵活的开发健壮的Web应用。
1.4.4.symfony
symfony是基于MVC模式的面向对象的PHP5框架
1.4.5.ThinkPHP
轻量级框架,内部OOP和面向过程代码都存在,是国人自己开发的框架。
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注业务逻辑。
1.5.框架文件介绍
解压 ThinkPHP,打开它或导入到项目中去,展开六个文件及文件夹:
Application --应用程序目录,当程序开发时自动生成,默认为空;
Public --公共资源文件目录,存放一些公用的文件,默认为空;
ThinkPHP --框架目录,框架的核心架构程序包;
README.md --说明文件,可删;
.htaccess --配置文件,一般用于配置伪静态;
Index.php --入口文件,所有程序都通过这里访问。
对于 ThinkPHP 框架目录内,也含有大量的目录及文件:
Common --核心公共函数目录
Conf --核心配置目录
Lang --核心语言包目录
Library --框架类库目录
|--Think --核心 Think 类库包目录
|--Behavior --行为类库目录
|--Org --Org 类库包目录
|--Vendor --第三方类库目录
|--... --更多类库目录
Mode --框架应用模式目录
Tpl --系统模版目录
LICENSE.txt --框架授权协议文件
logo.png --框架 LOGO 文件
README.txt --框架 README 文件
index.php --框架入口文件
ThinkPHP3.2.3完整版
Library文件目录
Think文件目录
二.ThinkPHP应用
新建一个shop文件目录,同级目录下拷贝ThinkPHP文件;创建一个主文件index.php。
index.php
<?php
//使用thinkphp框架开发shop商城
//引入框架的接口文件
include ("../ThinkPHP/ThinkPHP.php");
运行该文件,出现欢迎使用页面,说明使用ThinkPHP成功。
应用第一次访问时,会自动创建一下三个文件目录:
三.路由形式
路由就是系统从URL参数中分析出当前请求的分组、控制器和操作的过程。
tp框架路由有4种形式:
(1)基本get路径形式
http://网址/index.php?m=分组&c=控制器&a=操作方法
该方法是最底层的get形式、传统的参数传递方式,不时尚、不安全。
(2)pathinfo路径形式[默认方式]
http://网址/index.php/分组/控制器/操作方法
http://网址/index.php/Home/Index/advert
(3)rewrite重写形式(伪静态技术)省略index.php入口文件
http://网址/分组/控制器/操作方法
http://网址/Home/Index/advert
(4)兼容模式
http://网址/index.php?s=/分组/控制器/操作方法
四.创建控制器
UserController.class.php
<?php
//命名空间
namespace Home\Controller;
use Think\Controller;
//前台用户控制器
class UserController extends Controller{
//登录功能
function login(){
echo "登录";
}
//注册功能
function register(){
echo "注册";
}
}
五.view视图模板
5.1. 简单模板view调用
\$this -> display(); //模板名称与当前控制器、当前操作方法的名称一致
\$this -> display(模板名称); //调用当前控制器对应目录指定名称的模板
\$this -> display(控制器/模板名称); //调用其他控制器下的具体模板文件
tp框架两种模式:[默认]生产(线上)、开发(调试)
define("APP_DEBUG",true);//开发(错误提示)
define("APP_DEBUG",false);//生产
入口程序inde.php
<?php
header("content-type:text/html;charset:utf-8");
//使用thinkphp框架开发shop商城
//框架两种模式:[默认]生产(线上)、开发(调试)
define("APP_DEBUG",true);//开发(错误提示)
//define("APP_DEBUG",false);//生产
//引入框架的接口文件
include ("../ThinkPHP/ThinkPHP.php");
UserController.class.php
<?php
//命名空间
namespace Home\Controller;
use Think\Controller;
//前台用户控制器
class UserController extends Controller{
//登录功能
function login(){
//echo "登录";
//调用view视图
$this -> display(); //展示视图(视图文件名和当前操作方法名一致)
$this -> display('register'); //访问其他的模板文件
$this -> display("Goods/detail"); //访问其他控制器下的具体模板文件
}
//注册功能
function register(){
//echo "注册";
$this -> display(); //展示视图(视图文件名和当前操作方法名一致)
}
}
在地址栏输入
http://localhost/php_test/shop_test/shop/index.php/Home/User/login
出现错误提示
模板不存在:/Applications/MAMP/htdocs/php_test/shop_test/shop/Home/View/User/login.html
根据错误提示创建对应的模板文件
在view下创建User文件夹,在User文件夹下创建login.html和register.html模板文件。
在view下创建Goods文件夹,在Goods文件夹下创建detail.html模板文件。
控制器和模板的关系
通常每个控制标志在view目录都会有一个对应控制器标志的目录,里面有具体的模板文件。
例如:GoodsController.class.php控制在view目录有Goods目录,里面都是Goods控制器对应的模板文件。
5.2视图模板与tp框架结合
模板与tp框架结合
1.引入静态代码
2.引入css、image、js
a)以上3种,浏览器需要发送单独的http请求
b)引入css时,以User控制器标志作为当前目录,显然不行,通常利用常量把路径给定义好,后期只需维护一个常量即可。
//定义css、img、js常量路径
define("SITE_URL","http://localhost/php_test/");
define("CSS_URL",SITE_URL."shop/public/css/");
define("IMG_URL",SITE_URL."shop/public/img/");
define("JS_URL",SITE_URL."shop/public/js/");
c)在模板中通过常量获得具体的css、img、js等文件信息
3.把css文件本身的图片路径设置正确