Thinkphp5.0快速入门笔记(2)
学习来源与说明
https://www.kancloud.cn/thinkphp/thinkphp5_quickstart
测试与部署均在windows10下进行学习。
示例建立新的模块和控制器
在application模块下,建立新的模块,取名为new_controller,则建立新的文件夹,取名new_controller,然后在之下建立文件夹controller,模块在controller之下创建,建立模块blog,则创建Blog.php如图所示。
Blog.php中的内容如下:
<?php
namespace app\new_controller\controller;
class Blog
{
public function get($id=10)
{
return '查看id=' . $id . '的内容';
}
public function read($name)
{
return '查看name=' . $name . '的内容';
}
public function archive($year, $month)
{
return '查看' . $year . '/' . $month . '的归档内容';
}
}
其中的namespace app\new_controller\controller中,new_controller和创建的模块(目录)一致,
其中的class Blog中,Blog控制器和创建的文件Blog.php一致。
而控制器中可访问的方法即为public function部分。
ThinkPHP的URL访问
URL访问的完整路径为:
http://serverName/index.php/模块/控制器/操作。
例如访问:http://127.0.0.1/index.php/new_controller/blog/get/id/4(和上一段中的配置有关系)
另外说明:控制器和操作名不区分大小写。如:http://127.0.0.1/index.php/new_controller/BLOG/GET/Id是合法的。
可设置:如果希望严格区分大小写访问。// 关闭URL自动转换(支持驼峰访问控制器)'url_convert' => false(application中的config.php)
URL传递参数
访问:http://127.0.0.1/index.php/new_controller/blog/get/id/4
对应到了new_controller模块,blog控制器,get方法,id参数设置为4进行传递。
效果如下:(不传递参数默认id10传递)

访问:http://127.0.0.1/index.php/new_controller/blog/archive/year/2019/month/12两个参数传递。
当设置application下的config.php文件中的约92行处的url_param_type为1,则参数传递变为:http://127.0.0.1/index.php/new_controller/BLOG/Archive/2019/12。
效果如下:

隐藏URL中的index.php
原始地址为:http://serverName/index.php/模块/控制器/操作。这里的index.php是指代根目录中public下的index.php文件,其内容指定了application路径
隐藏index.php是否需要,可以先试试直接去掉index.php,如:http://127.0.0.1/new_controller/blog/archive/year/2019/month/12,访问成功则OK。
而入门教程中认为:在apache中,需要.htaccess 文件下写入以下代码完成:(其它的类型的都在教程里了)
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
URL路由缩减
在application下的route.php定义了路由信息,如修改其为如下:
<?php
return [
'__pattern__' => [
'name' => '\w+',
],
'[hello]' => [
':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
':name' => ['index/hello', ['method' => 'post']],
],
'blog/:id' => 'new_controller/blog/get/',
];
即增加了一行路由信息,那么访问:http://127.0.0.1/blog/123,即等价于访问:http://127.0.0.1/new_controller/blog/get/id/123。效果如下:

更改以上代码中第10行为:
'blog/[:id]' => 'new_controller/blog/get/',
则id参数的传递可以成为可选,则访问地址http://127.0.0.1/blog/正常输出不报错,否则报错。
针对index模块(以上都在说new_controller模块),则路由中可以省略为:
'blog/[:id]' => '/blog/get/',
默认index模块,直接写了控制器。index/blog/get/
路由规则
如:'hello/[:name]' => ['index/hello', ['method' => 'get', 'ext' => 'html']],
定义了路由规则限制了必须是get 请求,而且后缀必须是html 的,
路由简化
相同的部分路由可以简化,如以下路由信息:
'[blog]' => [
':year/:month' => ['blog/archive', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],
':id' => ['blog/get', ['method' => 'get'], ['id' => '\d+']],
':name' => ['blog/read', ['method' => 'get'], ['name' => '\w+']],
],
可以简化为:
'[blog]' => [
':year/:month' => ['blog/archive', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],
':id' => ['blog/get', ['method' => 'get'], ['id' => '\d+']],
':name' => ['blog/read', ['method' => 'get'], ['name' => '\w+']],
],
其它
在__pattern__ 中定义的变量规则我们称之为全局变量规则,
同时定义了全局规则和局部规则的话,当前的局部规则会覆盖全局规则
剩余复杂路由见说明书。
Thinkphp5.0快速入门笔记(2)的更多相关文章
- Thinkphp5.0快速入门笔记(3)
学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 快速入门第三节 获取当前的请求 ...
- Thinkphp5.0快速入门笔记(1)
学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...
- Vue.js2.0快速入门笔记
vue.js 解耦视图与数据,可复用的组件,前端路由,状态管理,虚拟DOM. MVVM模式:当View(视图层)变化时,会自动更新ViewModel(视图模型),View与ViewModel之间双向绑 ...
- keras搭建神经网络快速入门笔记
之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...
- ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载
ExtJS6.0+快速入门+API下载地址 ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用 ...
- C#快速入门笔记(1)——基础语法
C#快速入门笔记(1)——基础语法 总体框架:
- python3.5+django2.0快速入门(二)
昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...
- python3.5+django2.0快速入门(一)
因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...
- TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN
原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...
随机推荐
- java开发工具必备神器——Notepad++和jd-gui下载安装使用
Notepad++是 Windows操作系统下的一套文本编辑器,有完整的中文化接口及支持多国语言编写的功能(UTF8技术).除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码.Note ...
- Codeforces Gym100623J:Just Too Lucky(数位DP)
http://codeforces.com/gym/100623/attachments 题意:问1到n里面有多少个数满足:本身被其各个数位加起来的和整除.例如120 % 3 == 0,111 % 3 ...
- 事务的隔离级别,mysql默认的隔离级别是什么?
读未提交(Read uncommitted),一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证. (1)所有事务都可以看到其他未提交事务的执行结果 (2)本隔离级别很少用于实际应用 ...
- ZigBee入门第一天
按键查询控制灯的状态 1.宏定义灯和按键 2.按键和灯初始化 3.用if语句消抖的方法,实现按键控制灯的状态 相关寄存器 PxSEL PxDIR #include"ioCC2530.h&qu ...
- Java 7 源码学习系列(二)——Enum
Enum Enum类是java.lang包中一个类,他是Java语言中所有枚举类型的公共基类. 一.定义 public abstract class Enum<E extends Enum< ...
- markdown的博客
测试一下markdown写博客 function firstProgram() { console.log("This is my first markdown blog"); }
- json字符串转换成java对象
- Java编程思想:简单的泛型
import java.util.ArrayList; import java.util.Random; public class Test { public static void main(Str ...
- python爬虫笔记之re.match匹配,与search、findall区别
为什么re.match匹配不到?re.match匹配规则怎样?(捕一下seo) re.match(pattern, string[, flags]) pattern为匹配规则,即输入正则表达式. st ...
- 哈夫曼编码与解码的C++实现:建立哈夫曼树、进行哈夫曼编码与解码
最近完成了数据结构课程设计,被分到的题目是<哈夫曼编码和解码>,现在在这篇博文里分享一下自己的成果. 我在设计时,在网上参考了很多老师和前辈的算法和代码,向他们表示感谢!他们的成果给了我很 ...