学习来源与说明

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)的更多相关文章

  1. Thinkphp5.0快速入门笔记(3)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 快速入门第三节 获取当前的请求 ...

  2. Thinkphp5.0快速入门笔记(1)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...

  3. Vue.js2.0快速入门笔记

    vue.js 解耦视图与数据,可复用的组件,前端路由,状态管理,虚拟DOM. MVVM模式:当View(视图层)变化时,会自动更新ViewModel(视图模型),View与ViewModel之间双向绑 ...

  4. keras搭建神经网络快速入门笔记

    之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...

  5. ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载

    ExtJS6.0+快速入门+API下载地址 ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用 ...

  6. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

  7. python3.5+django2.0快速入门(二)

    昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...

  8. python3.5+django2.0快速入门(一)

    因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...

  9. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

随机推荐

  1. 模拟实现 Tomcat 的核心模块:NIO,HTTP,容器和集群

    如果你想看 Tomcat 源码但又无从入手,不妨从这个项目开始,代码量不多,但包含了 Tomcat 的核心处理流程,并且源码中有相当丰富的注释.相信通过此项目你能了解: NIO 基本编程.HTTP 协 ...

  2. 终于有人说清楚了--XGBoost算法

    1. 什么是XGBoost XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不 ...

  3. OCR文字识别笔记总结

    OCR的全称是Optical Character Recognition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别,交通路牌的识别,车牌的自动识别等等.本 ...

  4. Java实现异步调用

    一.创建线程 @Test public void test0() throws Exception { System.out.println("main函数开始执行"); Thre ...

  5. Everything-1.4.1.917 绿色版

    Everything是一款搜索软件,可以瞬间搜索到你需要的文件.如果你用过Windows自带的搜索工具.Total Commander的搜索.Google 桌面搜索或百度硬盘搜索,都因为速度或其他原因 ...

  6. springboot +mybatis分页插件PageHelper

    1.问题描述 JAVA界ORM的两位大佬Hibernate和Mybatis,hb自带分页(上手挺快,以前用了好几年hb,后期运维及优化快疯了),mybatis没有分页功能,需要借助第三方插件来完成,比 ...

  7. [POI2007]洪水pow 题解

    [POI2007]洪水pow 时间限制: 5 Sec  内存限制: 128 MB 题目描述 AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD ...

  8. akka 集群分片

    akka 集群 Sharding分片 分片上下级结构 集群(多台节点机) —> 每台节点机(1个片区) —> 每个片区(多个分片) —> 每个分片(多个实体) 实体: 分片管理的 A ...

  9. CF1194D 1-2-K Game (博弈论)

    CF1194D 1-2-K Game 一道简单的博弈论题 首先让我们考虑没有k的情况: 1. (n mod 3 =0) 因为n可以被分解成若干个3相加 而每个3可以被分解为1+2或2+1 所以无论A出 ...

  10. [转载]nginx负载均衡+keepalived三主(多主)配置

    nginx负载均衡+keepalived三主(多主)配置 1.实验环境,实现目标三台主机分别配置nginx负载均衡对后端多台主机做转发,同时配置keepalived实现HA,保证任意主机出现故障时其他 ...