×

thinkphp路由规则

thinkphp路由规则(thinkphp域名路由)

admin admin 发表于2023-04-06 14:44:09 浏览78 评论0

抢沙发发表评论

本文目录一览:

Thinkphp6控制器下面的小驼峰方法,如何让地址栏可以蛇形访问?

在ThinkPHP6中,如果想要让控制器下的方法能够被蛇形访问,可以通过设置路由的“名称”和“规则”来实现。

例如,如果想要在“Index”控制器下的“newsList”方法能够被蛇形访问,可以在路由配置文件中添加如下配置:

'news_list' = 'index/newsList'

在这段配置中,“news_list”是蛇形访问的名称,“index/newsList”是访问的规则。用户可以通过访问地址“localhost/news_list”来访问“Index”控制器下的“newsList”方法。-thinkphp路由规则

如果想要为“Index”控制器下的所有方法都启用蛇形访问,可以使用正则表达式配置路由规则,如下所示:

'(:miss)$' = 'index/:miss'

在这段配置中,“(:miss)”表示任何字符串,“$”表示匹配到字符串结尾,“index/:miss”表示将匹配到的字符串作为控制器名和方法名访问。例如,用户可以通过访问地址“localhost/news_list”来访问“Index”控制器下的“newsList”方法。-thinkphp路由规则

有效提高ThinkPHP的应用性能的几点建议

架构优化涉及到技术、存储、网络、服务的选型和构架,尽量使用成熟和现代的开发架构和设计模式。前后端完全分离设计,便于前后端的独立优化,也更加便于测试工作。

如果你的应用遇到了性能瓶颈,这个时候要考虑的就是优化架构而不是优化代码本身,因为架构层面的优化效果往往是最显著的。

架构的优化需要根据自身运营情况来调整,切忌不可按图索骥提前优化,反而容易得不偿失,导致技术成本提高甚至“负优化”

部署环境千万不要忘记关闭调试模式,这不仅仅是出于性能考虑,更多是基于安全因素。事实上,建议通过环境变量来配置关闭调试模式,这样部署后不需要更改任何配置文件。

因为调试模式影响日志记录信息、额外的调试信息和缓存失效,关闭调试模式能够带来一定的性能提升

使用多模块功能会增加文件的 I/O 开销和额外的配置及检查,如非必要在规划你的应用架构的时候尽量考虑使用单一模块,然后使用控制器分级来解决控制器过多的问题。

使用单一模块的性能优势,在部署到 swoole 的时候可以得到更加充分的体现,因为应用文件一旦启动服务,就会载入内存,而模块的相关文件则会每次请求重新加载。

在定义路由规则的时候,不要使用数组方式,尽量使用方法注册路由,并且多使用路由分组(或者资源路由)。分组路由可以减少路由的匹配次数,从而提升路由性能。如果你有多个域名的不同路由,也要按域名规划使用路由。 -thinkphp路由规则

尽可能设计在路由中进行当前路由的数据验证和权限检查等操作,一方面比较清晰,另外一方面可以尽量把验证操作提前,而不必等到控制器执行。

在分组比较多的情况下,开启路由的延迟解析。

如果同一个分组下面有比较多的路由规则,建议合并路由规则

对于 GET 请求的路由,可以设置路由的请求缓存。

部署阶段,可以开启路由缓存。

首先保持良好的开发习惯,了解 Db类和模型的正确使用姿势 ,数据库本身的性能优化可以参考 MySQL性能优化的最佳21条经验 ,下面主要是对框架中数据查询相关的优化策略。

尽量减少每次请求的查询次数,并对实时性要求不高的数据查询合理规划数据查询缓存(优先考虑使用 Redis 缓存)

如果使用了关联查询, cache 方法只能用于主模型的数据缓存,但你可以使用 Cache 类的 remember 方法进行方便的数据缓存。

尽量减少查询次数是出于性能考虑,但不是必须,使用最少的查询不代表性能就一定是最高。一个复杂的 JOIN 查询性能不见得有两次简单的查询高,而使用简单的查询反而更清晰易懂,并且更方便进行数据查询缓存。 -thinkphp路由规则

不要总是以为模型的性能一定比 Db 类低,框架的ORM查询设计经过了较为合理的优化,正确使用模型一样可以有出色的性能,而且比 Db 查询要方便很多。

尤其是对于一些复杂的设计来说使用模型关联显得比直接用Db更加简单,例如使用关联预载入查询就可以避免 N+1 查询问题。

如果用 Db 类自己实现的话,费时费力,性能还不一定优。

对于内存开销比较大的应用,在做大量数据查询和处理的时候,使用 cursor 方法,可以利用PHP的生成器特性,减少内存占用。

你会发现用户数据不论是1万还是10万级别,内存开销并没有大的变化。

涉及到对大量数据的处理,包括数据迁移、批量更新,尽量使用命令行指令运行,否则会因为超时而中断

可以通过数据集的方法完成的子集或者排序操作不要再次查询,例如:

利用下面指令在部署后生成字段缓存,可以减少每次数据表的字段查询开销。

注意:一旦数据库的表结构发生变化,必须重新生成。

每次在应用初始化或者模块初始化的时候会有一定的 I/O 开销,如果已经开启 OpCache 的话对性能影响甚微,如果比较在意的也可以通过命令行指令生成配置缓存(包括相关的公共文件和各种定义文件)。 -thinkphp路由规则

生成应用配置缓存:

生成模块配置缓存:

注意:一旦配置或者公共文件发生变化,必须重新生成。

类库映射可以提升类库的自动加载性能,使用下面的指令可以生成系统类库和应用类库的类库映射(包括 extend 目录下的类库)。

vendor 目录下的类库可以使用 composer 的 dump-autoload 指令优化加载性能。

该命令把 PSR-0 和 PSR-4 转换为一个类映射表,来提高类的加载速度。

URL和路由 - URL

像这样域名太长,搜索引擎爬虫的时候就不会收录的太好。

这个时候,就需要定义路由了。

定义路由,就是假设按照上面的网址,那么访问这样网站的时候,也是可以正确访问。那么就是定义路由成功了。定义路由的规则也可以自己定

在thinkphp5框架的application文件夹中,有route.php文件,这个文件中就是定义路由规则的。

下面这张图,是域名和定义路由规则的对应关系

路由解释:不看域名部分,url中以hello开始的,有参数name的,都会去访问index模块下的index控制器下的hello方法。条件就是是get请求,后缀为html

上面的[:name]加方括号的原因是表示这个参数可以有,也可以没有,是可选的。如果将方括号去掉,那么用户提交url的时候,就必须要有这个参数,否则就会报错。

只有像这样,添加参数之后,才能访问成功

如果不想在route.php中配路由的话,也可以这么配

如果要传入多个参数,就发现路径又很长了

因此,为了更短的路径,就需要再次去config.php中进行配置

配置好了之后,再去url栏输入地址尝试

可以看到,参数和参数值都可以一一对应了。那么这样有什么好处呢?

这样就可以欺骗搜索引擎的抓取了。让搜索引擎误认为这就是访问的是hello文件夹下的aaa文件夹下的那个很长名字的文件。而实际上,这里却是用户提交的多个参数、参数值。

再看一个例子:

这里例子可以看到:year和:month是必选的参数,如果给他们直接加上[]方括号,那么会报错。加了方括号,代表他们是可选的,既然是可选的,在原来的控制器的today方法中就需要给形参year和month赋予默认值,这样就不会报错了。-thinkphp路由规则

至于为什么要生成url地址,暂时还不清楚,接着往下学(貌似是为了得到一个路径,这个路径有用)

首先,要想使用生成url的函数,那么必须得先引入一些类文件,否则就会出现如下报错

引入类文件之后,就可以正常使用相应的方法了

如下图,框出来的部分所代表的含义是使用Url::build方法,将a=1b=2这个参数传到当前控制器中的url2方法中。若没有url2,那么默认传到当前方法中

但是,在导入url类文件之后,建议不用上面的那种框出来的使用方法,建议直接使用url()方法,更加简洁省事,效果还一样。

如何使用thinkphp路由正则表达式优化地址链接

用thinkphp开发项目,其中搜索模块需要携带很多的参数,就会出现地址栏的链接很长,这样不仅看上去不美观,对于搜索引擎来说也是不友好的链接。于是,就需要将其修改成简短干练的地址链接。

thinkphp中是支持路由重写的,需要自己编写重写规则。在编写的过程中,遇到一个问题。可以说是一个老大难的问题,那就是中文,搜索关键字需要匹配中文。

在尝试各种正则匹配规则都失败的情况下,我这里只能写成?keyword=关键字的格式。

下面我们看,具体的实例:

未优化地址:

/model/search.php?style=317order=1isyear=0recommend=0bid=301sid=327keyword=关键字page=1

优化地址:

/model/search-316-0-0-0-301-327-1.html?keyword=关键字

路由正则:

'/^model\/search\-(\d*)\-(\d*)\-(\d*)\-(\d*)\-(\d*)\-(\d*)\-(\d*)$/'='Home/Search/model?style=:1order=:2isyear=:3recommend=:4bid=:5sid=:6page=:7',-thinkphp路由规则

理想的优化:

/model/search-316-0-0-0-301-327-关键字-1.html

ThinkPHP5静态地址路由和动态路由的区别?

静态路由:指的是路由是固定的,是在配置文件里面固定好的。

动态路由:路由带有参数或者使用正则表达式进行匹配。

两者都是在配置文件中进行设置,最大的区别就是静态路由是固定的,一条路由规则匹配一条url,而动态路由就是一条路由匹配多多条url,简单来说。静态路由是一对一,动态路由是一对多。

thinkphp中路由表达式问题中""和":"是什么理解?

包裹在TP里面是组合变量

组合变量的优势是路由规则中没有固定的分隔符,可以随意组合需要的变量规则和分割符,例如路由规则改成如下一样可以支持:

Route::get('itemnameid', 'product/detail')-pattern(['name' = '[a-zA-Z]+', 'id' = '\d+']);

Route::get('item@name-id', 'product/detail')-pattern(['name' = '\w+', 'id' = '\d+']);