ThinkPHP框架基础知识

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。

ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQLSqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。

作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。

一、安装以及使用

1.下载最新版的ThinkPHP,将其解压到www目录下的tp/里,就可以使用了。

2.解压完后,里面有三个文件夹,一个index.php文件,下面简单介绍一下他们的用法。

  • Application文件夹是默认存放项目的文件夹,当然也可以更改。
  • Public文件夹是默认存放公有的东西,比如CSS,JS,图片等,不过一般这些东西我们会放在项目里面。
  • ThinkPHP文件夹是核心文件夹,里面又包含很多文件夹,尽量不要修改这里面的文件,若要修改,最好在模块里面修改。其中:
  1. Common文件夹是核心函数库,存放用户函数的。
  2. Conf文件夹是存放配置文件的,主要是convention.php核心配置文件,所有关于TP框架的配置都在里面。
  3. Lang文件夹是语言包,切换语言的时候可以用到。
  4. Library文件夹是核心资源库,里面存放核心类文件,其中Behavior/是系统行为目录,Org/是功能目录,Think/存放核心文件,Vendor是模板类文件目录。Think/下的App.class.php是应用核心文件,Controller.class.php是控制器类,Dispatcher.class.php是目录解析类,Model.class.php是模型类,Think.class.php是框架核心类,View.class.php是视图类。
  5. Mode文件夹是模型文件夹。
  6. Tpl文件夹是模板文件夹。
  7. ThinkPHP.php是TP框架的入口文件。
  • index.php是入口文件,所有项目必须通过入口文件。

这里将应用目录Application改为JiaoWu,运行入口文件后系统会自动生成JiaoWu文件夹,里面有三个文件夹,其中Common是存放函数的,Runtime是存放缓存文件的,Home是项目里面的模块,我们的代码都写在Home模块里面。Home/下,Conf里面的config.php是配置文件夹,可以在这里修改配置;Controller是控制器,存放控制器类文件;Model是模型文件夹;View是视图文件夹,存放显示模板文件。一般项目分前端和后台,就需要两个模块:Home和Admin。这里只有一个默认的Home模块。

二、MVC模式

Model:模型,模型(数据)层,操作数据(数据连接,数据访问);

View:视图,视图层,提供显示模板;

Controller:控制器,逻辑层,实现业务逻辑。

action:操作,放在控制器里面的方法。

C层比较重要,基本上所有的业务逻辑都是在C层实现的,用户的请求都是请求的C层,若请求比较简单,就从V层调用模板展现给客户端;若要访问数据库,就调用M层,将数据与模板结合起来展现给客户端。C层不仅要控制用户请求,还要进行逻辑的操作。与Smarty相比,多了M层操作数据。

TP框架与Smaty的逻辑是一样的,它提供了两个引擎,一个是TP框架的引擎,一个是Smarty引擎,我们一般用TP框架引擎。

在MVC中贯穿始终的一句话:约定胜于配置。我们在做有MVC模式的项目时,一定要遵循相应的而约定。例如:

不同的文件存放不同的路径,控制器必须放在Controller/,视图必须放在View/,模型必须放在Model/。

文件命名时必须按照约定来命名。例如:控制器文件命名方式:IndexController.class.php

三、控制器访问及路由解析

tp框架url地址可以由以下四种

  1. http://网址/index.php?m=模块名称&c=控制器&a=方法    基本get模式
  2. http://网址/index.php/模块/控制器/操作方法  路径模式pathinfo
  3. http://网址/模块/控制器/操作方法           rewrite重写模式
  4. http://网址/index.php?s=/模块/控制器/方法    兼容模式

我们一般用第二种模式。之前的访问我们都是访问的具体页面,但MVC模式中访问的是控制器下的操作(方法),而不是一个具体的页面。例如我们要访问Index控制器下的index()方法,URL地址:http://localhost/tp/index.php/Home/Index/index。

具体url地址模式设置(配置文件ThinkPHP/Conf/convertion.php)

URL_MODEL  =>  0/1/2/3  分别代表四种url地址模式。

我们当前项目的配置文件为JiaoWu/Home/Conf/config.php,我们可以通过修改该文件达到配置变量的目的,这个文件在系统运行过程中会覆盖convertion.php的配置变量

include "convertion.php";

include "config.php";  后引入的文件要把先引入的文件配置变量给覆盖掉。

URL_MODEL配置是控制URL的生成模式,而不是访问模式,事实上四种模式都可以访问。默认是1路径模式。

我们用快捷函数U("模块/控制器/方法"),根据参数和URL模式来创建URL地址,例如:

<?php
//控制器必须按照约定来做
namespace Home\Controller;  //命名空间
use Think\Controller;       //引入父类控制器
class IndexController extends Controller {

    public function Login()
    {
        echo U("Admin/Index/Login");    //控制生成的URL模式  //默认配置下输出:/tp/index.php/Admin/Index/Login.html
    }}

四、开发、生产模式

要在页面显示trace信息,需要在config.php配置文件中设置:

运行时会在页面右下角显示如下:

点击后会显示trace信息:

这是在开发调试模式下,可以看到加载的文件数为25个,将index.php 中 define(“APP_DEBUG”,true);的true改为false,即变为生产模式。

这时加载的文件数为10个,节省了许多文件的开发、关闭的系统开销,节省资源。少掉的文件都在JiaoWu/Runtime/common~runtime.php缓存文件里面,而改为开发模式时,此文件就不存在了,因为已经全部加载了。

五、控制器和对应方法创建

控制器是MVC模式中的核心,tp默认有一个Index控制器:Home/Controller/IndexController.class.php,Index控制器里面有一个操作方法:index()

<?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;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>版本 V{$Think.version}</div><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_55e75dfae343f5a1"></thinkad><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>‘,‘utf-8‘);

    }

我们在访问http://localhost/tp/index.php入口文件的时候,会默认访问Index控制器下面的index方法。

如果要自己创建一个控制器Main:

  1. 在\JiaoWu\Home\Controller文件夹下新建一个控制器文件MainController.class.php

    注意:文件命名规则,按照驼峰法命名

  2. 打开该文件,在里面造控制器Main类,并自定义操作方法XianShi()

<?php
namespace Home\Controller;   //注意是反斜杠
use Think\Controller;
class MainController extends Controller
{
    public function XianShi()
    {
        echo "主页面显示";
    }
}

这样我们就完成了控制器和操作方法的建立,如果要访问我们刚才的Main控制器下的XianShi方法:

  3. 控制器中如果要调用视图层中的模板:

public function XianShi()
    {
        $this->display();    //调用XianShi模板
    }

这样再次访问,会发现报错:

原因:模板文件没有创建,这时候我们就要去创建模板文件

六、视图模板文件创建

在Home/View/下创建Main控制器对应的模板文件夹Main/,该文件夹就对应着Main控制器:

然后在Main/下创建一个XianShi.html的模板文件来对应Main控制器下的XianShi方法:

在XianShi.html里面写要显示的代码:

然后再次请求:

七、ThinkPHP完全开发手册

在ThinkPHP完全开发手册中,关于TP框架的所有东西都可以在里面找到。

  • 配置

  1.读取配置

  使用C方法获取已经设置的参数值:C(‘参数名称‘),如:

 public function XianShi()
    {
        echo C(‘URL_MODEL‘);
    }

参数不区分大小写,但是建议使用大写方式的规范。

注意:配置参数名称中不能含有 “.” 和特殊字符,允许字母、数字和下划线。

如果URL_MODEL尚未存在设置,则返回NULL。

  2. 动态配置

  C(‘参数名称‘,‘新的参数值‘);
public function XianShi()
    {
         C(‘URL_MODEL‘,0);
         echo U(‘XianShi‘);
    }

  请求XianShi操作:

但是改成2和3都没变,应该是BUG。

动态配置赋值仅对当前请求有效,不会对以后的请求造成影响。

  • 控制器
  1. 控制器定义
<?php
namespace Home\Controller;
use Think\Controller;
class MainController extends Controller
{
    public function XianShi()
    {
        echo "主页面显示";
    }
}

Home\MainController类就代表了Home模块下的Main控制器,而XianShi操作就是Home\IndexController类的XianShi(公共)方法。

当访问 http://localhost/tp/index.php/Home/Main/XianShi后会输出:

主页面显示

控制器通常需要继承系统的Controller类或者其子类。

控制器的名称采用驼峰法命名(首字母大写),控制器文件位于 Home/Controller/IndexController.class.php

  2. 前置和后置操作

   前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效。

<?php
namespace Home\Controller;   //注意是反斜杠
use Think\Controller;
class MainController extends Controller   //继承父类
{
    //前置操作
    public function _before_XianShi()
    {
        echo "执行显示之前 ";
    }
    public function XianShi()   //调用方法时,前置操作和后置操作会自动调用
    {
        echo "主页面显示";
    }
    //后置操作
    public function _after_XianShi()
    {
        echo " 执行显示之后";
    }}

当访问 http://localhost/tp/index.php/Home/Main/XianShi后会输出:

  3. Action参数绑定

   Action参数绑定功能默认是开启的,所以不用配置。

  参数绑定有两种方式:按照变量名绑定和按照变量顺序绑定。默认的参数绑定方式是按照变量名进行绑定:

  ‘URL_PARAMS_BIND_TYPE‘  =>  0, // URL变量绑定的类型 0 按变量名绑定 1 按变量顺序绑定

例如:绑定一个参数name

 public function XianShi($name)
    {
        echo $name."主页面显示";
    }    

报错是因为参数没有设定默认值,也没有传值,前置操作仍可以执行,后置操作就不会执行了。

我们用路径方式在URL后面加上/参数名/参数值来传递参数:

若要绑定两个或多个参数,继续加上/参数名/参数值来传递参数:

public function XianShi($name,$id)
    {
        echo $name.$id."主页面显示";
    }    

URL中的参数顺序和操作方法中的参数顺序都可以随意调整,关键是确保参数名称一致即可。

  4. 调用模板文件  

public function CeShi()
    {
        $this->display();
    }

在Home/View/Main/下新建CeShi.html文件,在里面写上显示代码:

<body>
<a href="/tp/index.php/Home/Main/XianShi/ids/123/name/lisi">调用显示操作</a><!--不要忘了传参数 -->
</body>

访问http://localhost/tp/index.php/Home/Main/CeShi

点击超链接,跳转

注意:1.使用TP框架,跳转页面时不是跳向具体页面,而是操作方法,URL与访问操作一样,一直写到找到具体操作方法

2. 当操作需要传递参数的时候,也要将参数写上。

  5. URL大小写

  ‘URL_CASE_INSENSITIVE‘  =>  true,   // 默认false 表示URL区分大小写 true则表示不区分大小写  //有bug,无法区分大小写

  6. 注册变量:

  与smarty引擎一样,用assign注册变量,在模板文件中用<{ }>解析变量

public function CeShi()
    {
        $this->assign("test","hello");
        $this->display();
    }

CeShi.html文件中:

<body>
<a href="/tp/index.php/Home/Main/XianShi/ids/123/name/lisi">调用显示操作</a><!--不要忘了传参数 -->
<div><{$test}></div>
</body>

再次请求CeShi操作:

  7. 获取变量

  可以用传统方式获取各种系统变量,因为没有统一的安全处理机制,后期如果调整的话,改起来会比较麻烦。所以,更好的方式是在框架中统一使用I函数进行变量获取和过滤。

 CeShi.html文件中:

<form  action="/tp/index.php/Home/Main/XianShi/id/123/name/lisi" method="post">
<input type="text" name="name" />
<input type="submit" value="提交" />

</form>

XianShi操作:

public function XianShi($name,$id)
    {
          // echo $_POST["name"];
          echo I(‘post.name‘);
    }    

请求CeShi操作:

点击提交:

  8. 获取TP框架常量信息

  用get_defined_constants获取TP框架常量信息

public function CeShi()
    {
        var_dump(get_defined_constants(true));//获取TP框架常量信息   //true会分类显示
    }

请求CeShi操作:得到常量信息,是二维数组的形式,里面又分了35个数组,来存储所有的常量信息。下图是常量user的部分信息:

这样写路径的时候不要写死,可以调用常量来显示,即方便,也不用担心写错。若想找到操作,就用__ACTION__;若想找到控制器,就用__CONTROLLER__;若想找到模块,就用__MODULE__;若想找到当前路径,就用__SELF__(URL路径全部信息,包括参数)。这里要注意的是以双下划线开头的可以直接写,而不用<{}>标记。

例如:上文中的表单就可以调用常量来显示,因为是在同一控制器下的不同方法,所以用__CONTROLLER__:

<form  action="__CONTROLLER__/XianShi/id/123/name/lisi" method="post">    

  8. 一个方法,实现两个逻辑

  例如登录,修改等,即要显示页面,又要实现相应功能。这里以登录为例:

public function login()
    {
        //一个方法,实现两个逻辑,显示页面,实现登录
        if(empty($_POST["uid"]))
        {
            $this->display();
        }
        else
        {
                //具体处理以后讲
            echo "实现登录";
        }
    }

Home/View/Main/login.html模板代码:

<body>
<!--提交到当前方法来处理 -->
<form action="__ACTION__" method="post"> <!--__ACTION__代表当前操作(方法)路径即/tp/index.php/Home/Main/login -->
    <input type="text" name="uid" />
    <input type="password" name="pwd" />
    <input type="submit" value="登录" />
</form>
</body>

请求login操作:

直接点击登录不会跳转还是显示当前页面,只有写上数据才会实现登录:

时间: 2024-10-05 05:58:42

ThinkPHP框架基础知识的相关文章

ThinkPHP框架基础知识二

一.空操作和空控制器处理 空操作:没有指定的操作方法:空控制器:没有指定控制器,例如: http://网址/index.php/Home/Main/login  正常 http://网址/index.php/Home/Main/hello 空操作(hello方法不存在) http://网址/index.php/Home/beijing/login   空控制器(beijing控制器不存在) 1.空操作: 一般网站处于安全考虑不给用户提示任何错误信息 “空操作”本质意思:一个对象(控制器)调用本身

PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

一.程序设计 1.设计功能系统--数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理--原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的特性--PHP框架的差异和优缺点 三.算法与数据结构 1.常见算法--算法的概念.时间复杂度和空间复杂度.常见排序算法.常见查找算法 2. 3. 4. 四.高并发解决方案 1. 2. 原文地址:https://www.cnblogs.com/darklights/p/9275751.html

ThinkPHP框架基本知识,介绍给新人

tp基础框架基本知识 thinkPHP框架简称TP框架: index.php:项目的入口文件,所有的页面都从这个页面进入application:存放项目的文件夹public:存放公有的东西thinkPHP:TP框架的核心文件夹,里面的东西尽量不要修改里面包含:1.common:核心函数库,用户自定义的函数可以存在这里面2.conf:配置文件,主要在里面的convention.php3.lang:语言包4.library:存放TP核心类文件,里面的think存放类,我们使用的类基本都在5.mode

Spring框架基础知识

本人博客文章网址:https://www.peretang.com/basic-knowledge-of-spring-framework/ Spring框架简介 Spring , 一个开源的框架 , 由Rod Johnson创建. Spring是为了解决企业应用开发的复杂性而创建的 , 可以让简单的JavaBeans/POJO来实现之前只有EJB[1]才能完成的事情. Spring还提供了大量API简化与其他第三方框架的集成. 纵览Spring , 你会发现Spring可以解决非常多的问题 ,

ThinkPHP框架基础回顾

首先,我们必须要知道的就是目录结构: 我们把解压完成之后会出现以下的目录: 这是tp官方的手册目录解释,我们可以先不要去看其他的文件,这里,我们主要用到的就是php的核心库ThinkPHP框架目录: 然后在这个非常主要的目录下面,又有如下的文件目录对我们是同样的重要: 这个就是tp的核心目录了,接下来就是关于入口文件了,显而易见,这个入口文件就比zend框架的入口文件好找多了,那么这个入口文件其实在解压目录的表面就已经给我们了,我们可以直接使用它,当然也可以自己去写,就是那个index的文件,千

ThinkPHP框架基础3

连接数据库 把convertion.php数据库相关的设置复制到config.php 在config.php做数据库连接配置,设置好数据 制作model模型 a)        model本身就是一个类文件 b)        数据库中的每个数据表都对应一个model模型文件 c)         最简单的数据model模型类 $goods =  new  命名空间GoodsModel(); $goods = D(‘模型标志’); a)        $goods = D(“Goods”); b

Thinkphp 框架基础

ThinkPHP 一.php框架介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳定的运行阶段 项目停止运行(旧项目的人员已经全部离职,新人开发新项目) 问题: 1. 多人开发项目,分工不合理,(html   php   mysql) 2. 代码风格不一样,后期维护十分困难 3. 项目生命周期十分短,项目生命没有延续性,造成资源浪费.人员浪费

php CI框架基础知识

一. CI框架的MVC导图 二. CI框架目录文件介绍 (1)index.php  单入口         整个框架对外暴露的唯一访问文件 (2)application  应用文件(放置用户信息,用户控制器.用户模板等) application/cache            --->   缓存 application/config            --->   配置文件 application/controllers        --->   控制器 application/

tp框架基础知识

作者:黄力军 index.php入口文件:作用,所有tp框架里的内容要想访问文件.都要走index.php文件他是整个程序的入口 Application代表应用程序的目录   所有写的应用程序放这里 Public公用目录   里面放公用的东西比如css js ThinkPHPtp框架核心文件夹.Thinkphp核心文件夹里分为如下 ThinkPHP.php是tp框架的核心类 Common里面存放tp框架里面的函数方法 Conf文件夹里面要注意*代表配置文件特别是convention 文件tp框架