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 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...
随机推荐
- selenium3+python3自动化测试学习之模拟事件处理
自动化测试实战之ActionChains模拟用户行为 需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽 解决:selenium提供了一个类来处理这类事件 selenium.webdr ...
- 【HDU - 2612】Find a way
-->Find a way 直接上Chinese Descriptions: hsj和lsh最近迷上了pokemon go的游戏.在双十一大物期中考试来临之前,他们想抓一只稀有土拨鼠来攒攒人品 ...
- 如何安装xenserver
xenserver安装 选择键盘 是否同意协议 清理磁盘 选择本地磁盘安装 选择本地镜像文件 输入管理密码 配置IP地址 配置DNS服务器地址 选择地点 配置NTP服务器地址 开始安装 安装完成
- Spring 入门程序
1.0 导包的时候要注意: 以上的第一个是.class文件 以上的第二个是文件的解释性页面. 以上的第三个是.java文件 2.0 配置文件需要导入依赖(有dtd 依赖,也有xsd依赖) ² 从be ...
- 从无到有构建vue实战项目(三)
四.响应式布局的实现 elemnt-ui参考bootatrap提供了响应式布局,附上地址:https://element.eleme.cn/#/zh-CN/component/layout 以下是我的 ...
- FireFox下Canvas使用图像合成绘制SVG的Bug
本文适合适合对canvas绘制.图形学.前端可视化感兴趣的读者阅读. 楔子 所有的事情都会有一个起因.最近产品上需要做一个这样的功能:给一些图形进行染色处理.想想这还不是顺手拈来的事情,早就研究过图形 ...
- UVALive 7037:The Problem Needs 3D Arrays(最大密度子图)
题目链接 题意 给出n个点,每个点有一个值,现在要选择一些点的集合,使得(选择的点生成的逆序对数目)/(选择的点的数量)的比率最大. 思路 点与点之间生成一个逆序对可以看做是得到一个边,那么就是分数规 ...
- HDU 4059:The Boss on Mars(数学公式+容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=4059 题意:给出一个n,求1~n里面与n互质的数的四次方的和是多少. 思路:不知道1~n的每个数的四次方的求和公 ...
- BZOJ 1878:[SDOI2009]HH的项链(莫队算法)
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题意:…… 思路:比上题还简单很多.数字很小,开一个数组哈希记录出现次数(记得数组要开1e6) ...
- 看看大神 Paul Graham 对如何学习编程的回答
前言 我翻阅自己之前写的博客文章,发现在 2015 年我刚开始学习编程的时候,翻译了一段 Paul Graham 关于"How can I learn to program?"的回 ...