6月13 ThinkPHP框架基础
ThinkPHP
一.php框架基础介绍
真实项目开发步骤:
- 多人同时开发项目,协作开发项目、分工合理、效率有提高(代码风格不一样、分工不好)
- 测试阶段
- 上线运行
- 对项目进行维护、修改、升级(单个人维护项目,十分困难,代码风格不一样)
- 项目稳定的运行阶段
- 项目停止运行(旧项目的人员已经全部离职,新人开发新项目)
问题:
1. 多人开发项目,分工不合理,(html php mysql)
2. 代码风格不一样,后期维护十分困难
3. 项目生命周期十分短,项目生命没有延续性,造成资源浪费、人员浪费
4. 项目不能很好适应客户需求,牵一发而动全身。
其他相关框架
1. zendframework zend php语言公司发布的官方框架,重量级(功能多)
2. yii 美国华人开发的框架,xue qiang, qiang, 重量级框架,纯OOP框架
3. CI CodeIgniter轻量级框架,开发速度快,部署灵活
- cakephp外国框架,重量级,速度慢
- symfony外国重量级框架
- ThinkPHP轻量级框架,国人框架,入门容易
什么框架:
一堆代码的集合,里边有变量、函数、类、常量,里边也有许多设计模式MVC、AR数据库、单例等等。
框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次。
为什么使用框架
l 框架可以帮组我们快速、稳定、高效搭建程序系统
l 该系统由于框架的使用使得本身的维护性、灵活性、适应客户需求方面得到最大化的增强。
l 使用框架的过程中可以使得我们的注意力全部集中业务层面,而无需关心程序的底层架构。
ThinkPHP版本介绍
thinkphp.cn

thinkphp 3.2版本
1. 解压后thinkphp文件夹中的文件,入口文件换成 index.php
index.php-----是解压出来的第一个php文件,是一个项目的入口文件,也就是项目所有的页面都要走此页面

2. conf 配置文件夹

3. library 核心资源库中

4. library 核心资源库中核心文件 Think

ThinkPHP-----核心文件夹(里面的东西不要修改)
ThinkPHP包含着:
**Common----核心函数库(存放用户自定义的函数)
**Conf-----配置文件(主要存放在convention.php)
Home----
Lang----语言包
**Library-----核心资源库 (存放的是一些核心类:Library/Think下全部是类)
Mode----模型文件夹
Tpl-----模板
Application-----存放项目的文件夹,可以改的
public----存放一些公有的东西
框架项目部署
1. 打开index.php入口文件,将原来的Application改成JiaoWu(如下所示)
<?php
// 应用入口文件 // 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True); // 定义应用目录
define('APP_PATH','./JiaoWu/');//自己的文件名(在这里可以随便命名) // 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php'; // 亲^_^ 后面不需要任何代码了 就是如此简单
2. 访问入口文件的同时系统会自动把对应的应用目录文件JiaoWu创建出来

3. 打开Home文件夹

MVC模式
MVC模式:
Model 模型 模型(数据)层
View 视图 视图层
Controller控制器 逻辑层
M: 操作数据(数据连接,数据访问)
V:提供显示模板
C:实现业务逻辑
MVC:约定胜于配置(约定非常的重要)

控制器访问及路由解析
通过url地址get参数找到指定的控制器,并进行对应方法调用请求
http://网址/index.php?m=模块名称&c=控制器&a=方法
以上url地址信息代码不够优雅、不安全。
action:操作,放在控制器里面的方法
之前的访问方式:访问具体的页面
访问的方式:访问控制器下的操作(某个方法),不是一个具体的页面
1.MVC的4种访问方法
1.找到入口文件index.php
2.再找到模块名,控制器,方法名(操作)
以下是Home模块中的LoginController.class.php利用4种方法对其访问
<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller
{
public function index()
{
echo "login---登录";
} }
1. http://网址/index.php?m=XX&c=XX&a=XX 基本get模式
写法:localhost:8080/tp/index.php/?m=Home&c=Login&a=index

2.http://网址/index.php/模块/控制器/操作方法路径模式pathinfo(推荐使用)
写法:locahost:8080/tp/index.php/Home/Login/index

3.http://网址/模块/控制器/操作方法 rewrite重写模式
写法:http://localhost:8080/tp/Home/Login/index(自己没有实现)
4.http://网址/index.php?s=/模块/控制器/方法兼容模式
写法:http://localhost:8080/tp/index.php/?s=Home/Login/index(4的写法)
http://localhost:8080/tp/?s=Home/Login/index(虽然也可以不知道为啥)
1.具体url地址模式设置(配置文件ThinkPHP/Conf/convertion.php)
URL_MODEL = 0/1/2/3 分别代表四种url地址模式
下图Shop改为JiaoWu

config.php是我们当前自己项目的配置文件,我们可以通过修改该文件达到配置变量的目录
这个文件在系统运行过程中会覆盖convertion.php的配置变量
include “convertion.php”;
include “config.php”; 后引入的文件要把先引入的文件配置变量给覆盖掉
换句话说:也就是修改配置是在JiaoWu/Home/config.php中而不是在核心资源库convertion.php
我们系统有兼容4中url地址模式的使用
系统有的时候会自动创建url地址,它会根据当前模式进行url地址创建使用
快捷函数U(); 创建url地址
修改配置:
特别注意:这里的控制模式不是来控制访问的,是来控制生成的

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function Login()
{
//echo "你好";
//echo U("Home/Index/Login");
//echo U("Index/Login");
echo U("Login");//输出同样
//利用U()快捷方法创建路径的三种方式
}
}
注意: 如果是在当前模块的当前控制器下,可以只写方法
如果是在当前模块的其他控制器下,要写上控制器和方法
如果是在其他模块下,模块、控制器、方法名(操作)都要写
修改配置参数:
'URL_MODEL' => 1, (最常用)
输出结果:/tp/index.php/home/index/login.html
'URL_MODEL' => 0,
输出结果:/tp/index.php?m=home&c=index&a=login
'URL_MODEL' => 2,
输出结果:/tp/home/index/login.html
'URL_MODEL' => 3,
输出结果:/tp/index.php?s=/home/index/login.html
开发、生产模式
开发调试模式:系统需要加载大概24个文件 index.php define(“APP_DEBUG”,true);
生产模式:系统只需要加载很少的大概7个文件在入口文件
index.php中定义: define(“APP_DEBUG”,false);
节省了许多文件的开发、关闭的系统开销,节省资源

要在页面显示trace信息,需要在自己的配置文件中:

define('APP_DEBUG',True); 为true时:

define('APP_DEBUG',False); 为false时:

而且还会出现

控制器和对应方法创建
控制器是MVC模式中的核心,tp默认有一个Index控制器:

如果要自己创建一个控制器Login:
- 在\JiaoWu\Home\Controller文件夹下新建一个控制器文件LoginController.class.php
注意:文件命名规则,按照驼峰法命名

在IndexController.class.php中
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
$this->display();
} }
在view下一级index.html中
<html>
<meta charset="utf-8" />
<head></head>
<body>
<h1>主页面</h1>
</body>
</html>
此时出现的页面时:

原因:上面两者不是相互对应的,模板文件没有创建正确,这时候我们就要去创建模板文件
如何正确创建模版:
如果我们想要访问index控制器中的index方法,首先我们要创建一个index控制器对应的模板文件夹,该文件夹就对应着index控制器:
换句话说也就是在View目录下新建目录Index目录然后再在里面新建index.html文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<h1>这是一个主页面(与IndexController.class.php对应)</h1>
</body>
</html>
显示效果为:

6月13 ThinkPHP框架基础的更多相关文章
- ThinkPHP框架基础
ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...
- ThinkPHP框架基础知识一
ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来 ...
- ThinkPHP框架基础3
连接数据库 把convertion.php数据库相关的设置复制到config.php 在config.php做数据库连接配置,设置好数据 制作model模型 a) model本身就是一个 ...
- ThinkPHP框架基础知识二
一.空操作和空控制器处理 空操作:没有指定的操作方法:空控制器:没有指定控制器,例如: http://网址/index.php/Home/Main/login 正常 http://网址/index. ...
- Thinkphp 框架基础
ThinkPHP 一.php框架介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项 ...
- ThinkPHP框架基础知识三
一.JS文件与Css文件存放位置 其实JS与Css文件放在任意位置都可以找到,只要路径正确就行. 在TP框架中我们访问的所有文件都要走入口文件index.php,相当于访问的是index.php页面. ...
- ThinkPHP框架 基础 链接数据库
在第一次成功访问应用入口文件的时候,会显示出一个系统默认的欢迎页面并自动在APPLication文件夹里生成三个文件夹,如下,第一次访问应用文件路径:localhost/tr/index.php ...
- 6月13 ThinkPHP控制器
控制器 控制器是MVC模式中的核心,tp默认有一个Index控制器: 1.控制器的命名规则:新建一个主页面的控制器 在JiaoWu/Home/Controller下新建一个文件:MainControl ...
- ThinkPHP框架的一些基础应用
这是俺滴师傅给俺传授了的知识,特在此分享. TP框架,做PHP开发的都应该有所耳闻.下面,我们就来说说入口文件的生成: 创建新项目时,首先,在目录文件下创建一个新的文件夹.然后将Thinkphp框架文 ...
随机推荐
- SQLServer2014 安装错误:等待数据库引擎恢复句柄失败
查了很多资料最后靠百度百科里的一票报道彻底解决困难.在次发表一下以便给后人排忧解难 已下为百度连接 https://jingyan.baidu.com/article/7908e85cb24c19af ...
- Unity3D学习笔记(三十一):Xlua(1)
Xlua:腾讯研发,开源免费 配置:文件解压,拷贝到Unity项目里 注意:Xlua文件夹不许移动,不许重命名 运行Xlua: 1.引用命名空间 2.创建虚拟机 3.运行lua语句 4.不需要 ...
- DAG最小路径点覆盖
Problem 给出一个有向无环图 (\(DAG\)),求出最少使用其中多少条互不相交的路径覆盖所有点. Solution 若有 \(n\) 个点,对于每个点 \(i\) ,我们将它拆成两个点 \(i ...
- 树莓派 无屏幕 安装Ubuntu系统 无头安装 无显示器 用网线
能看到此篇博客的人说明都尝试失败了,会发现内存卡刷入Ubuntu后,无法通过ssh操作树莓派.是因为官方的ubuntu系统在初次运行时需要设定一些东西,类似windows第一次启动也需要设置那样,如果 ...
- tomcat+nginx实现均衡负载
在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...
- svn的使用教程
引言:这里只讲解几个svn不常用但是非常有用的使用方法,对于经常使用的不做概述,因为很简单,而且网上都能找到. 1.1 svn历史版本对比已经恢复到指定版本(myeclipse) 在项目中的文件或者文 ...
- hibernate事务规范写法
@Test public void testTx() { SessionFactory sessionFactory = null; Session session = null; Transacti ...
- 关于JavaScript和Java的区别和联系
转载自: Javascript和Java除了名字和语法有点像,其他没有任何的关系. 做个比较是为了让大家更好的理解Javascript,事实上,两种语言根本没有可比性,是完全不同的. Javasc ...
- 《剑指offer》第五十九题(队列的最大值)
// 面试题59(二):队列的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小 ...
- angular2 学习笔记 (Typescript - Attribute & reflection & decorator)
更新 : 2018-11-27 { date: Date } 之前好像搞错了,这个是可以用 design:type 拿到的 { date: Date | null } 任何类型一但配上了 | 就 de ...