写在前面:从这里开始往后是TinkPHP框架的学习了,保持更新,图片链接失败问题也解决了。

文章目录

  • 1介绍
  • 2 ThinkPHP
    • 2.1 thinkPHP介绍
    • 2.2部署(重点)
      • 2.2.1细节问题
        • 2.2.1.1自动生成
        • 2.2.2.2目录安全文件
        • 2.2.2.3文件生成
        • 2.2.2.4默认访问
  • 3 thinkphp中控制器
    • 3.1控制器创建
  • 4 路由形式(重点)
  • 5 分组(平台或模块)
  • 6 控制器中的跳转
    • 6.1 URL组装
    • 6.2系统跳转方法
  • 7 thinkPHP中的视图(重点)
    • 7.1什么是视图
    • 7.2视图的创建
    • 7.3 视图的展示
    • 7.4 变量分配(初阶)
    • 7.5变量分隔符
    • 7.6模板常量替换机制
  • 8 综合案例-实现OA系统的登录页面展示

1介绍

  1. 什么是框架?

框架是一堆包含了常量、方法和类等代码的集合,它是一个半成品的应用,只包含了一些项目开发的时候使用的底层架构(如连接数据库),并不包含业务逻辑,框架还包含了一些优秀设计模式,如单例模式、工厂模式、AR(Active Record)模式等。

  1. 为什么要使用框架?

    在以后的实际开发中会有一个成型的开发流程:

    如果在上述的流程中不是用框架进行开发会遇到那些问题?

    • 代码风格不一样,维护困难,可能造成项目生命周期短;
    • 一处小的修改,会牵扯出很多地方的修改;
    • 在后期满足客户需求方面(功能扩展)存在局限性
  2. 使用框架的好处

  3. 市面上常见的php框架

  • Zend Framework

    是重量级框架,是PHP语言公司出品的官方框架,但是由于官方的考虑的功能比较全面,导致比较臃肿,启动慢

  • YII

    是重量级框架,是美国华人开发的框架,作者叫薛强,(英文名Qiang),中文称之为“易框架”,最大的特点就是将代码的重用性发挥到了极致。目前YII框架在外企用得比较多

  • Symfony

    重量级框架,一款国外框架。

  • Laravel

    轻量级框架,一款国外框架。

  • Codelgniter

    轻量级框架,简称CI框架。代码火焰/火焰代码,一款国外框架

  • thinkPHP

2 ThinkPHP

2.1 thinkPHP介绍

是一款国人开发的框架,目前有中文的社区(论坛)、中文官网、中文帮助文档等。在国内使用的还是比较普遍。因为其有一系列中文支持,所以比较适合作为入门级框MVC

扩展:(了解)

关于软件版本的修饰词

Alpha版本:内测版本,内部测试

Beta版本:公测版本,面向用户,由由用户去找bug

RC版本:候选版本,软件在这个阶段已经不会有太多的功能性调整,主要是排错。

R版本:release版本,发行版本,稳定的版本。

下载完后会得到一个zip压缩包,解压后目录结构为

其中application文件夹里,index.html是空的

public文件夹里只有一个readme文件,这个文件没啥用

TinkPHP是框架的核心目录。其目录结构如下:

Library是此目录的核心目录,Mode为模式,一般不动他

系统函数库叫functions.php我们自己定义的叫function.php

Conf目录下

补充,

在thinkPHP中除了这个convention.php配置文件之外,还有其他的配置文件,但是convention.php这个文件是系统级别的配置文件,还有一个是应用级别的配置文件,最后还有一个分组级别的配置文件。

从作用范围来说:

​ 系统>应用>分组

从优先级来说:

​ 分组>应用>系统

Tpl是模板

TinkPHP->Library目录下

第三方扩展目录不是thinkphp开发的,功能扩展目录是thinkPHP开发的。

TinkPHP->Library->Think,此目录为Library的核心目录

2.2部署(重点)

  1. 创建站点目录

  2. 配置apache虚拟主机的配置文件,创建一个虚拟主机

    文件位于apache目录下conf/extra/httpd-vhosts.conf

    实际开发中不需要配置这么多。

    本机的站点根目录是"D:\WorkSpace\PHP\ThinkPHP\CarManagePlatform"

  3. 重启Apache

    操作方法一:点击apache图标(状态栏)

    apache2.2-启动(start)/停止(stop)/重启(restart)

    操作方法二:双击apache图标,会打开apache的控制面板,在面板上可以启动/停止/和重启

    操作方法三:控制面板-管理工具-服务

    win10是:控制面板——系统和安全——管理工具——服务

  4. 修改hosts文件,将配置文件中声明的2个域名(一个站点绑定的域名,一个站点的别名)做下绑定(解析)

    问题:hosts文件在哪?

    快速打开方法一:win+R,输入drivers,能打开到driver文件夹,进入etc目录,选中hosts文件。这个可能修改不了,先将该文件拖到桌面,再用记事本打开,然后再拖回覆盖

    快速打开方法二:win+R,输入to hosts,能直接打开到etc目录,并选中hosts文件。(有可能运行不了)

    (这一步,我这台机子上好像没有配置,是不是在远程服务器上配置的)

    可以在cmd中通过ping命令测试域名是否绑定成功:

  5. 将代码文件复制到站点目录中去

    在TinkPHP压缩包目录中复制TinkPHP目录和index.php入口文件到站点根目录中;当然,也可以把压缩包全部目录复制过去。

    本机的站点根目录是"D:\WorkSpace\PHP\ThinkPHP\CarManagePlatform"

    复制:

    然后通过浏览器进行访问:

    Application目录(此处的Application目录和压缩包中不一样,里面还包含了三个目录):

    Application目录下的Home目录:

    说明:在首次运行index.php入口文件的时候才会产生对应的Application目录,再次运行不会产生变化。

2.2.1细节问题

2.2.1.1自动生成

在首次运行index.php入口文件的时候会产生相应的目录结构,目录的名字取决于在index.php中定义常量APP_PATH。默认是Application

2.2.2.2目录安全文件

在自动生成的文件夹中都有一个空白的html文件,文件名叫做index.html,这个文件我们称之为目录安全文件。其作用:

在Apache的配置文件中由optons+inxexes,默认展示站点目录,如果在站点目录中不存在inedindex开头的文件开头的文件,则展示目录结构,但是有了index.html(目录安全文件)之后就不会展示结构了。、

一句话概括就是:防止列出站点的文件结构。

2.2.2.3文件生成

当我们首次运行入入口文件的时候发现在磁盘中系统给我们生成了一些目录,那这些目录是如何生产的?

文件夹/文件的生成主要取决于TinkPHP的系统流程。

这样参考thinkphp完全开发手册,本机使用的thinkphp版本是3.2.3。3.2.3和3.2.2两个版本基本是通用的。所以手册看这两个版本都行。手册中这样写道:

2.2.2.4默认访问

在部署之后访问会看到一个笑脸,笑脸是怎么输出的?

默认分组/平台/模块:Home

默认控制器:Index

默认方法:index

上述默认值,可以在系统配置文件中找到。

3 thinkphp中控制器

3.1控制器创建

​ 命名规则:控制器名(英文首字母大写)+Controller关键词+.class.php(php中所有的类文件都以.class.php结尾。

例如:创建商品控制器则写成GoodsController.class.php,用户控制器则写成UserController.class.php。

案例:在Home分组中创建一个用户控制器User控制器。(站点根目录->Application->Home->Controller)

​ 控制器结构代码:

总结步骤:

  1. 声明当前控制器(类)的命名空间;(控制器的本质就是类)
  2. 引入父类控制器(类);
  3. 声明控制器(类)并继承父类;

说明:命名空间

  • 命名空间是在php5.3版本中引入的一个概念3,所以thinkphp3.2.3要求php版本大于等于5.3
  • 命名空间本身跟目录没有关系,但是在thinkphp中命名的声明和使用必须跟目录挂钩(php没有这样的要求)

案例:参考上述结构代码的完善三步骤,来完善刚才创建的user控制器。

这里要注意的是,namespace的目录从Home开始写,use的目录确从think的目录开始写,这里不用纠结,thinkphp自己能找到目录,就这样写就ok了。

这里<?php不写结尾标记,因为这样服务器运行效率更高。

在类中变写一个测试方法,名字可以起叫test:

修饰词

public:可以被类外调用,

private:可以被类内调用

protected:只能被有继承关系的调用。

static:静态的

phpinfo()这个函数用于打印出当前的php环境信息。

看到这个结果说明刚刚定义的控制器可以正常访问了

携带参数,get访问,m=模块(平台、分组)&c=控制器&a=方法

访问结果

如果后期需要更多的控制器来实现功能,则只需要按上述的步骤反复地创建更多需要的控制器就行了。

4 路由形式(重点)

路由:是指访问项目中某个方法的URL地址

以前的路由形式:index.php?p=平台&c=控制器&a=方法。

在thinkPHP里就不一样了,在TinkPHP里提供了4种路由形式:

  1. 普通形式路由(get形式路由)

    路由形式:http://网址/入口文件?m=分组名(或模块名或平台名)&c=控制器名&a=方法名&参数名=参数值

    网址可换为域名

    例如:访问Home分组下的User控制器的test方法,并且传递一个参数,id=1

    http://1006.com/index.php?m=Home&c=User&a=test&id=1

    问题:URL传递的任何东西都会在地址栏中显示出来,既不安全也不好看。所以thinkPHP里很少用

  2. pathinfo路由形式(thinkPHP默认)

    路由形式:http://网址/入口文件/分组名(或模块名或平台名)/控制器名/方法/参数名1/参数值1/参数名2/参数值2

    例如:访问Home分组下的User控制器的test方法,并且传递一个参数,id=1

    http://1006.com/index.php/Home/User/test/id/100

    http://www.1006.com:端口号/index.php/Home/User/test/id/100

    http://127.0.0.1:端口号/index.php/Home/User/test/id/100

  3. rewrite路由形式

    路由形式:http://网址/分组名/控制器名/方法/参数名1/参数值1/参数名2/参数值2

    和TinkPHP默认的路由形式相比就只缺少了入口文件。

    例如:访问Home分组下的User控制器的test方法,并且传递一个参数,id=1

    http://1006.com/Home/User/test/id/100

    注意:该路由形式不能直接使用,需要配置完成才能使用。

    配置步骤:

    第一步:需要修改Apache服务器配置文件httpd.conf,开启重写模块,去掉之前的注释符

    第二步:需要修改虚拟主机配置文件(目录Apache/conf/extra/httpd-vhosts.conf),给需要开启重写的站点目录配置处添加allowoverride。并且值是all

    第三步:若修改了A怕车配置文件,则还需要重启Apache

    第四步:将TinkPHP压缩包中的.htaccess文件复制到入口文件的同级目录

    注意:php一共拥有好几个运行模式,每个运行模式的使用.htaccess文件的方法可能不一样。这种路由形式需要Apache的支持,而除了Apache软件之外服务器软件还有nginx、lightd等等,多以第三种路由形式一般情况下不推荐使用

  4. 兼容路由形式:

    路由形式:http://网址/入口文件?s=/分组名/控制器名/方法名/参数名1/参数值1

    问题:兼容路由形式有几个参数?

    答:上述路由形式只有一个从参数,参数名是s,等于号后面都是s参数的值

    例如:访问Home分组下的User控制器中的test方法,并且传递一个参数,id=10086

    http://1006.com/index.php?s=/Home/User/test/10086

  5. 关于thinPHP中路由形式的配置

    路由形式在thinkPHP系统中的配置文件是有体现的。在系统配置文件:tinkphp->conf->convention.php

    特别说明:路由形式的配置值,不影响我们在地址栏中直接输入其他形式路由访问。该配置项的值影响的是thinkPHP系统封装的URL组装函数(U函数)的生成url的地址的形式。

5 分组(平台或模块)

分组:一般的项目都会根据某个功能的使用对象来区分代码,这个时候放到一起之后会形成一个文件夹,这个文件夹就可以称之为分组。分组就是我们通常所指的平台(前台、后台)。其实就是管理员端(admin)和用户端。

例如在刚部署好的thinkPHP系统中Home目录就是一个分组目录。后期如果需要使用更多的分组,则需要自己去创建分组。

如何去创建分组?

步骤:参考Home分组的目录结构,重新创建一个新的目录,在其中依照Home中的结构,创建对应的目录即可。

第一步:创建一个分组的目录,目录与Home目录同级

第二步:创建Admin目录中的文件结构

分组创建好之后,可以在Admin分组中编写一个控制器,然后编写方法进行测试访问:

编写结构代码,编写测试代码(具体方法):

分组的URL访问路由:

http://网址/入口文件/分组名/控制器名/方法

当前测试方法访问地址:http://1006.com/index.php/Admin/Test/test

如果需要创建多个分组,参考以上的步骤,反复创建对应的目录结构就行。

6 控制器中的跳转

6.1 URL组装

Url组装就是根据某个规则,来组成url地址,这个功能就叫做url组装。在thinkphp中,系统提供了一个封装的函数来处理url组装,这个方法叫做U方法。U方法是系统提供的快速方法,除了U方法这样大写字母的方法之外还有一些其他的快速方法如:A、B、C、D、E、F、G、I、M、R、S。这些方法都定义在系统的函数库文件中(function.php)

U语法格式:

​ U(‘URL路径’,参数数组);

例如:要使用U方法组装出当前控制器index方法地址,则可以写成

U(‘index’)

再例如:使用U方法组装出另外一个控制器Index中的index的地址,则可以写成

U(“Index/index”);

如果需要给指定的页面添加参数,比如给Index控制器下的index方法传递一个id=100

U(‘Index/index’,array(‘id=>100’,‘id2=>1000’))

总结出一个通用的格式:

U(‘分组名/控制器名/方法名’,array(‘参数名1’=>参数值1,‘参数名2’=>参数值2))

6.2系统跳转方法

在thinkPHP中系统有2个跳转方法,分别是成功跳转和失败跳转:

成功:

​ $this->success(跳转提示,跳转地址,等待时间);

失败:

​ $this->error();

跳转提示参数必须要有,后面的地址和时间可以没有,如果没有指定跳转地址,则跳转到上一页。

说明:上述案例中使用的seucess和error方法在当前的控制器中并没有定义,其是父类控制器中已定义好的方法,由于当前控制器继承了父类,所以可以直接使用。

7 thinkPHP中的视图(重点)

7.1什么是视图

视图就是MVC三大组成部分中V(View),主要是负责信息的输出和展示。

7.2视图的创建

创建的位置需要是分组目录下的View目录中与控制器同名的目录(文件夹)中。

例如Test控制器中的login方法,需要有一个模板,则该模板文件login.html需要放到

View/Test/login.html

如果有多个模板文件,则按照上面的要求进行创建。

7.3 视图的展示

在smarty中展示模板使用的方法是display,在thinkPHP中同样也是display方法。Display在thinkPHP中的语法格式:

$this->display(); 展示当前控制器与当前请求方法名称一致的模板文件(这个在开发中用得比后两个多)

$this->display(‘模板文件名[不带后缀]’); 展示当前控制器下的指定模板文件

$this->display(‘View目录下的目录名/模板文件名[不带后缀]’); 展示指定控制器目录下的指定模板文件。

案例:

​ 在Test控制器中的test方法中展示test.html

​ 在Test控制器中国的test1方法中展示test.html

​ 在Test控制器中的test2方法展示View/Demo/test.html,这种情况用得并不多,这个Demo是指View下的目录名,而不是指控制器名,只是习惯上我们将这俩名保持一致。

7.4 变量分配(初阶)

​ 在实际开发的时候不仅仅只是展示·模板这么简单,往往还需要展示数据,这个时候变量还在控制器的方法中,需要将数据传递到模板中并且展示,这个过程叫做变量分配。

在thinkPHP中熊他给你封装好了一个变量的分配方法,叫做assign。具体语法:

$this->assign('模板中变量名',$php中的变量名);

说明:一般情况两个参数的变量都是一样的(准确来说应该是名字是一样的);

案例:在test控制器中的test方法中传递一个变量给test.html展示。

注意assign方法要在display的前面,否则模板得不到数据。

目前已经将var变量传递给了模板文件test.html,在模板文件中如何去展示数据?

在thinkPHP中默认的展示基本变量方法如下:

{$模板中的变量名}

展示效果

7.5变量分隔符

在thinkPHP中默认的变量左右分隔符是{和},其是可以被更改的,可以在配置文件中找到具体配置项。

7.6模板常量替换机制

在实际开发的时候会出现一个这样的问题:在引入图片、css、js、文件的时候,往往需要写一些比较复杂的路径,所以这个时候我们比较希望能有一些特殊的常量将很复杂的路径简单化,这个时候可以考虑使用模板常量替换的机制。

在thinkPHP中系统默认给我们提供以下几个常用的模板常量(不能在控制器里用,只能在模板里用):

__MODULE__:表示从域名后面开始一直到分组名结束的路由。如/index.php/Admin
__CONTROLLER__:表示从域名后面开始一直到控制器结束的路由如/index.php/Admin/Test
__ACTION__:表示从域名后面开始一直到方法名结束的路如/index.php/Admin/Test/test6
__PUBLIC__:站点根目录下的Public目录的路由如:/public
__SELF__:表示从域名后面开始一直到路由的最后/index.php/Admin/Test/test6/id/100
(如果没有参数,则__SELF__和__ACTION__所表达的内容是一样的)

为什么上述的几个常量就可以表示上面输出的这些路由呢?

答:在thinkPHP中“模板常量”是通过模板内容替换机制来实现的,并非是常量的定义。替换机制可以查看行为文件ContentReplace.Behaviour.class.php

其模板常量的实现核心就是字符串的替换。

为了后期使用的方便,我们可以在配置文件中定义一个自定义的模板常量:

说明:在开发的时候,不到万不得已不要去修改系统配置文件。可以将需要修改的配置项在分组/应用级别的配置文件中去定义:

测试:

[外链图片转存失败(img-YPGhP53f-1562809462936)(C:\Users\Luckyrin\AppData\Roaming\Typora\typora-user-images\1562052974520.png)]

8 综合案例-实现OA系统的登录页面展示

(没有这个项目的源码,大家主要看一下宏观操作,具体的页面编写不是这里的重点)

控制器:PublicController.class.php

方法:login

模板文件:login.html

第一步:创建控制器文件,并且编写结构代码

第二步:编写方法login,展示模板文件login.html

第三步:(浏览器路由访问,未发现文件)将模板文件复制到指定的位置

位置:./Application/Admin/View/Public/login.html

第四步:将相应的静态资源文件复制到指定的位置

位置:/Public/Admin

第五步:修改模板文件login.html

显示效果:

ThinkPHPdayo01学习笔记(体系化,系统化笔记)相关推荐

  1. Yann Lecun纽约大学《深度学习》2020课程笔记中文版,干货满满!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]Yann Lecun在纽约大学开设的2020春季<深度学习>课 ...

  2. 使用html记笔记,开始学习HTML,并记下笔记

    开始学习HTML,并记下笔记. 外边距(不影响可见框大小,影像盒子位置) margin-top(上) right(右) bottom(下) left(左) "外边距也可以为一个负值,元素会反 ...

  3. 学习Python的做笔记神器——Jupyter Notebook

    学习Python的做笔记神器--Jupyter Notebook 给想学好Python的同学们安利一波,Jupyter Notebook是学习Python最好的做笔记环境,没有之一哦. Jupyter ...

  4. 《Python深度学习》第一章笔记

    <Python深度学习>第一章笔记 1.1人工智能.机器学习.深度学习 人工智能 机器学习 深度学习 深度学习的工作原理 1.2深度学习之前:机器学习简史 概率建模 早期神经网络 核方法 ...

  5. 《学习geometric deep learning笔记系列》第一篇,Non-Euclidean Structure Data之我见

    <学习geometric deep learning笔记系列>第一篇,Non-Euclidean Structure Data之我见 FesianXu at UESTC 前言 本文是笔者在 ...

  6. 《Python学习手册》读书笔记

    原文地址为: <Python学习手册>读书笔记 之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<P ...

  7. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  8. 《我的PaddlePaddle学习之路》笔记一——PaddlePaddle的安装

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 环境 系统:Ubuntu 1 ...

  9. 训练大规模对比学习的一些小笔记

    训练大规模对比学习的一些小笔记 FesianXu 20210815 at Baidu Search Team 前言 笔者在公司中会面对数以亿计的用户历史行为数据,用好这些数据是非常关键的.而最近流行的 ...

  10. 《我的PaddlePaddle学习之路》笔记四——自定义图像数据集的识别

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 *本篇文章基于 Paddle ...

最新文章

  1. 打造一个宇宙 星系模拟产生对宇宙进化惊人见解
  2. P1983-车站分级【图论,记忆化dfs,构图】
  3. 【链接】Linux C/C++ 学习路线-已拿腾讯、百度 offer
  4. 保护导师,从我做起;爱护博导,人人有责
  5. Navicat for MySQL出现1030-Got error 28 from storage engine错误
  6. 洗礼灵魂,修炼python(8)--高效的字典
  7. 绕过waf mysql爆库_sqlilab-Less-21-30-writeup
  8. 关于table的那些用法(一)
  9. Oracle总结第一篇【基本SQL操作】
  10. 100999凑整到万位进一_四年级数学第一单元练习作业
  11. oracle日志不应用,dg报ORA-600日志不能应用
  12. 《矩阵分析》代码Ⅱ——gauss消元法,列主元素法,总体主元素法matlab实现
  13. vim 模式下的几个快捷用法
  14. nutch2.3.1 mysql_nutch 安装部署 以nutch2.3.1 为例
  15. 隐藏桌面上计算机图标不见了怎么办,电脑的快捷图标不见了怎么办
  16. setImageResource和setImageDrawable和setImageBitMap区别
  17. Hbase Locality
  18. java h5服务器推送事件_初识H5开启多线程与服务器推送事件
  19. Java编写 输入一个字符串,请编写一个函数统计连续相同字符及其数量。例如,输入“aabbbbcccAB”,返回“a2b4c3 A1 B1”及5;
  20. Break Continue Return( BCR ) 三者的区别

热门文章

  1. 酷睿i7 1165g7相当于什么水平 i71165g7属于哪个档次
  2. DCM4CHEE-ARC-LIGHT
  3. origin如何绘制双y轴曲线_使用Origin软件绘制双y轴曲线图的过程
  4. sap增加税码注意事项
  5. draggrid简单用法
  6. 智能建筑弱电工程基本的一些施工项目
  7. Python 爬取蚂蜂窝旅游攻略 (+Scrapy框架+MySQL)
  8. 【成长访谈】周新林:靠持续的努力,总能换来自己期望的生活
  9. 1525C - Robot Collisions
  10. mysqlReport 详细解析