这里不讲原理,只讲操作。

这里不说MVC,只说目录(文件夹)结构。

假设Apache Http Server、PHP、MySql都已经安装完毕并已配置完毕,能够输出phpinfo()。

框架是什么?

下载

安装AMP

安装ThinkPHP

运行第一个页面

  http://localhost

  http://127.0.0.1

  等

  这里的http://localhost,实际上是通过某个方法实现的页面的跳转,它等于http://localhost/index/index/index,等于http://localhost/index.php?controller=index&action=index

  看到最后那个链接形式,是不是比较熟悉了?

  但是这种链接方式属于动态链接,一个问题是不好记不清晰,另一个问题是搜索引擎不喜欢记录这样的链接,它们更倾向于收集静态页面。

  那么ThinkPHP就把动态链接,通过一些方法,转为了看起来像静态的链接。用的什么方法实现的这个效果?暂时不必关心。

  所以,http://localhost/index/index/index这个链接从左到右三个Index的意思是,在网站根目录下,有个index文件夹【一级】,下面有个controller文件夹(这个没有也没必要在链接上显示出来,以后还会有别的目录),下面有个index.html文件【二级】,

  文件里有个类(这个类和文件属于同一个级别,并且名称必须一致),类里面有个Index函数【三级】,这个函数没有参数,所以后面没有了,如果有参数,那么从第三个index开始,往后全是参数的键值对儿。

  比如:http://localhost/index/index/index/a/11/b/22/c/33,一目了然,不解释了。

  5.0不再支持普通的URL访问方式,所以下面的访问是无效的,你会发现无论输入什么,访问的都是默认的控制器和操作

  http://localhost/index.php?controller=TestController&action=index

运行第二个页面

  在tp5.0\application\index\controller目录下,复制index.php,改成index2.php,注意!打开这个文件,把里面的类名(即Class后面的”index“)改成Index2,无论你改成什么,要保持和文件名一致。否则会报错,报控制器找不到的错,类似这样:

控制器不存在:app\index\controller\Index2

官方推荐的视频教程里并没有强调这一点,如果照他们说的,只改文件名,是打不开那个页面的。

  如果你改完文件名和类名,回到浏览器,F5刷新,发现没什么作用,依然报错,并且确定没有其它问题的情况下,按Ctrl+F5,强制清缓存刷新试一下。

连接数据库

  用PHP的大部分项目都是要操作数据库的。

  要连数据库,有以下几个事儿要做:

  PHP安装目录下找到php.ini

    查找extension_dir,把等号后面的路径改为绝对路径,像这样: extension_dir = "F:/php/ext"

    查找extension=php_pdo_mysql.dll,把这行释放出来,即把最前面的分号删除,使之有效。

    因为PHP5.6已经内置了PDO,所以不必再单独引用PHP_PDO.dll了。

URL访问规则

  如果\application\config.php文件中的url_convert设置为true时

  控制器命名为:Abcde时,访问abcde、Abcde、ABCDE均有效

  控制器命名为:AbCde时,访问abcde、Abcde、AbCde、ABCDE均无效,此时要用Ab_Cde来访问。

  也就是说,如果你的名字中有大写,那么就要在每个大写的前面加下划线。

  即,ThinkPHP以一个名字中的第二个大写来判断是否加入下划线,对驼峰命名法进行了特别的处理。

  下面是这种转换的核心代码:

    /**
* 字符串命名风格转换
* type 0 将 Java 风格转换为 C 的风格 1 将 C 风格转换为 Java 的风格
* @access public
* @param string $name 字符串
* @param integer $type 转换类型
* @param bool $ucfirst 首字母是否大写(驼峰规则)
* @return string
*/
public static function parseName($name, $type = 0, $ucfirst = true)
{
if ($type) {
$name = preg_replace_callback('/_([a-zA-Z])/', function ($match) {
return strtoupper($match[1]);
}, $name); return $ucfirst ? ucfirst($name) : lcfirst($name);
} return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
}

不使用.htaccess会怎样?  

一个奇怪的现象

某个控制器和类名,理论上应当一致,并且建议首字母应当大写。如果文件名和类名的首字母改成小写,再去访问之前的URL,并不会马上报错,保持刷新状态一直刷新,过了大约20秒,报错。再改回首字母大写,也不会马上报错,再过一会儿,才报错。

这是为什么?像是因为缓存,又在runtime目录下没有发现什么特别的东西。

为什么?

隐藏入口文件

先决条件:

1、httpd.conf配置文件中加载mod_rewrite模块。

  去掉LoadModule rewrite_module modules/mod_rewrite.so前面的分号

2、把AllowOverride None改成owOverride All

TP5.0默认的入口文件是tp5.0\public\index.php,如果不希望被扫描,可以改成其它名字,例如ttt.index。同时要注意修改同级目录下的.htaccess文件中的最后一行的正则表达式,index.php改成ttt.php。

定义路由

这里属于锦上添加的部分,暂时不细说。

不过,你们有没有想过,“路由”这两个字,是什么意思?我第一次接触时,就是来自计算机领域,知道它在表达什么,但是不知道这个词的来历,这种表达方式,似乎有点历史的样子,似乎不应该来自计算机领域。

后经查询,果然,它来自市政建设领域,如下:

路由(市政工程术语)
管线的“路由”一般可以概述为管线的起点到通往每个目的地的路径,即管线的走向位置 管线的“路由”一般可以概述为管线的起点到通往每个目的地的路径,即管线的走向位置,一般依据规划红线由当地市政或规划部门所确定,是管道施工的主要依据。 同时“路由”也属于管线设计过程中的一个环节。管线产生出来的过程一般包括选线路、确定路由、出图、施工等程序。
其中,“确定路由”准确的叫法应该称为确定“管道走向”,是配管专业在基本确定设备布置后,开展详细配管,前进行配管研究时出的一种图。图中主要表示大管道的走向和初步位置。

这里的“由”,是经由的由,表示从哪走。网络领域中的“路由”,借用了市政领域“找路”这个方案的术语,即路由。

ThinkPHP最简教程的更多相关文章

  1. Typora极简教程

    Typora极简教程 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档.” ...

  2. Hexo+Github博客最简教程-Dockerfile自动搭建

    闲谈 拿出你的气质,打开你的电脑,借你半小时搭建好属于你的hexo博客,小生用dockerfile自动帮你搭建好:你只需要在你的mac或linux或windows上提前把docker安装好,如何安装不 ...

  3. CentOS安装使用.netcore极简教程(免费提供学习服务器)

    本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...

  4. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  5. vue与TypeScript集成配置最简教程

    https://blog.csdn.net/u014633852/article/details/73706459 https://segmentfault.com/a/119000001187808 ...

  6. Python 极简教程(八)字符串 str

    由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...

  7. Nginx 极简教程(快速入门)

    作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4.  ...

  8. 【转】Typora极简教程

    Typora极简教程 Typora download ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转 ...

  9. nginx极简教程

    Nginx 极简教程 本项目是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx. examples 目录中的示例模拟了工作中的一些常用实战场景,并且都可以通过脚本一键式启动,让您可以快 ...

随机推荐

  1. 谈谈MySQL死锁之二 死锁检测和处理源码分析

    这一篇主要是通过一个实验来进行描述,过程是比较枯燥的. 实验准备 create table test_lock(id int auto_increment primary key ,stock int ...

  2. python hex() oct() bin() math 内置函数

    示例: print hex(20),hex(-20) #转换成十六进制 print oct(20),oct(-20) #转换成八进制 print bin(20),bin(-20) #转换成二进制 pr ...

  3. MySQL 5.6新特性 -- crash-safe replication

    在slave上有两个线程:io线程和sql线程io线程接收master的二进制日志信息并写入到本地的relay log中:sql线程执行本地relay log中的信息.io线程读取到的二进制日志当前位 ...

  4. 为何float有效位数为7位?

    为何float有效位数为7位? 首先我们应该明确一点:C语言中,%f表示保留7位有效数字7位有效数字: 是指 整数部分 和小数部分一共7位 单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^ ...

  5. layui table 根据条件改变更换表格颜色 高亮显示 数据筛选

    请问想让当layui表格的某个字段符合某个条件的时候,让该行变颜色.这样可以实现么. layui数据表格怎么更换表格颜色 layui表格 通过判断某一行中的某一列的值进行设置这一行的颜色 LayUI之 ...

  6. 译:5.RabbitMQ Java Client 之 Topics (主题)

    在 上篇博文 译:4.RabbitMQ 之Routing(路由) 中,我们改进了日志系统. 我们使用的是direct(直接交换),而不是使用只能进行虚拟广播的 fanout(扇出交换) ,并且有可能选 ...

  7. Python中的format()函数

    普通格式化方法 (%s%d)生成格式化的字符串,其中s是一个格式化字符串,d是一个十进制数; 格式化字符串包含两部分:普通的字符和转换说明符(见下表), 将使用元组或映射中元素的字符串来替换转换说明符 ...

  8. linux每日命令(8):mv命令

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 一.命令格式: mv [选项] 源文件或目 ...

  9. SpringBoot 拦截器(Interceptor)的使用

    拦截器intercprot  和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意 ...

  10. Keras查看model weights .h5 文件的内容

    Keras的模型是用hdf5存储的,如果想要查看模型,keras提供了get_weights的函数可以查看: for layer in model.layers: weights = layer.ge ...