ThinkPHP共支持4种形式的URL模式,分别为普通模式、PATHINFO模式、REWRITE模式和兼容模式。下面分别对4种URL进行讲解。接下来将介绍另外一种比较新式的URL模式。......
2023-11-04
使用MVC的好处之一就是能够提供可定制化的URL形式,其中路由功能是MVC框架中最常见的功能。ThinkPHP提供了完善的URL路由功能,能够实现高度可定制的URL形式。在ThinkPHP 3.0中,URL路由规则使用URL_ROUTE_RULES数组进行配置;而在ThinkPHP 2.x中使用的是routes.php配置文件,这点需要注意。下面为了便于讲解,将以URL“http://tp.localhost/index.php/t/李开涌”路由到“http://tp.localhost/index.php?a=content&m=index&name=李开涌&email=kf@86055.com”为示例,详细介绍ThinkPHP提供的几种路由规则形式(所有路由规则都是基于项目不分组的,即多入口文件模式)。
1.键对值形式
格式:'路由规则'=>'[模块/操作]?额外参数1=值1&额外参数2=值2...'
键值对形式的路由规则容量比较小,它是以关联数据作为配置规则。其中t/:name表示路由规则,路由规则决定了URL表现的形式;Index/content表示路由的目标,Index表示控制器名称,content表示控制器动作,顺序不能相反。t后的分隔符“/”表示一个路由匹配的结束,它与Index/content进行呼应。
2.键对数组形式
格式:'路由规则'=>array('[模块/操作]','额外参数1=值1&额外参数2=值2...')
键对数组形式和键对值形式是类似的,不同的是路由目标的形式使用的一个关联数组。可见,键对数组形式无论是格式上还是容量上都比单一的键对值形式要灵活。
3.跳转形式
格式:'路由规则'=>'外部地址'
跳转形式的路由规则形式就是一个页面跳转,在实际应用开发中的意义不大。外部地址是一个字符串,可以是任何有效的URL地址。
4.重定向跳转
格式:'路由规则'=>array('外部地址','重定向代码')(www.chuimin.cn)
重定向跳转是普通跳转模式的增强模式,它在跳转到外(内)部地址时还会向浏览器头部(header)输出额外信息。例如搜索引擎对于普通的跳转是不会索引的,但在跳转时给浏览器的头部附加上“HTTP/1.1301 Moved Permanently”信息,此时搜索引擎就认为该链接是一条正常的数据链接,会按正常的程序进行索引。常用的浏览器头部信息有301、302等。
上述4种路由形式中,主要使用的是第1和第2种。这里还需要深入理解路由规则,所谓的路由规则就是与浏览器相配对的参数,在浏览器中呈现的参数可以有若干个,但一条路由规则只对应一个参数。
在没有使用路由之前的传统MVC控制流程中,无论哪种URL模式都必须要显式地给出控制器名称和动作名称(index除外,PATHINFO使用参数位置表示)。但使用URL路由之后,控制器和控制器动作都可以取消了,开发人员可以使用任何一个字符(包括中文)代替控制器和动作名称,这在主流的大型网站中是非常多见的,例如新浪微博、facebook等。
URL路由并不一定需要MVC框架才能实现,事实上使用普通的PHP来做URL路由在超大并发的环境下也不是很理想。URL路由完全可以使用Web服务器的重写功能来实现,但无论是复杂度还是灵活性都不是一般的PHP程序员所能接受的,ThinkPHP提供的路由处理机制简化了路由配置流程,降低了门槛,使得网站应用开发人员更专注于业务逻辑。
现在再回过头来看前面的路由规则形式。“t/:name”是一种动态写法,“:”表示的是一个可接收的变量,如果不使用“:”则不是变量,而是一个固定的字符串;“name”表示变量名称,它与URL字符串“t/”后面的参数进行配对。变量是可以加限制符的,限制符以正则表示式中的匹配符号作为条件,例如限制变量name只能接收纯数字,代码如下。
加入限制符以后,在content动作中使用$_G[“name”]进行接收,就再也获取不到传参值了,因为“李开涌”并非为数字。读者可以尝试改成数字进行验证。
路由规则不仅能够使用限制字符,还能够使用排除字符。同样,排除字符使用“^”符号进行定义,多个排除字符使用“|”隔开,如以下代码所示。
如上述代码所示,使用排除字符之后,在浏览器中输入“t/add”、“edit”、“delete”字符都将被过滤,在content动作中将不能接收到这些参数值。
在以上几个示例中,路由名称“t”都是固定的,它必须要与浏览器地址中的t进行对应。使用Web服务器URL重写大多数都是使用正则来实现路由功能的。同样,在ThinkPHP中路由名称也是支持正则匹配的,使用正则匹配后显得更加灵活,只要URL请求字符串符合定义的正则,ThinkPHP就可以将相应的地址路由到目标地址中,如以下代码所示。
使用正则后,控制器、动作、参数都可以在一条正则中进行配对。使用正则表达式,可以实现任何形式的URL,它的灵活性是最高的,但需要读者额外熟悉正则表达式(正则表达式并非PHP特有的功能,它是一套规范,在JavaScript等许多脚本中应用得很广泛,MVC框架本身就是利用了大量正则来进行MVC控制的)。
有关PHP MVC开发实战的文章
ThinkPHP共支持4种形式的URL模式,分别为普通模式、PATHINFO模式、REWRITE模式和兼容模式。下面分别对4种URL进行讲解。接下来将介绍另外一种比较新式的URL模式。......
2023-11-04
统一资源定位符也被称为网页地址,是用于完整地描述Internet 上网页和其他资源的地址的一种标识方法。现在它已经被万维网联盟编制为Internet 标准RFC1738 了。例如:其中“http”指使用的协议,“mail.***.com”是服务器名,“80”是端口号,“/a/j/js3/main.jsp”是路径,“?sid=SDeQWJeebVpZIlKECzee”是询问。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明,用户只要键入统一资源定位符的一部分(mail.***.com/a/j/js3/main.jsp?......
2023-11-21
U函数支持URL路由,下面将分别介绍。数组中的键值对和URL字符串中的参数与参数值是相对应的,最终上述URL在4种URL模式中的表现形式如下。s=/content/username/ceiba在生成URL参数时,可以使用数据库中的信息作为参数值。生成URL后,界面设计人员可以在视图中进行获取了,如以下代码所示。使用U函数生成URL的格式如下。......
2023-11-04
若要在浏览器窗口中打开网页,或将数据传递到指定URL处的另一个应用程序,可以使用getURL动作。在参数窗格中遵循以下指导原则,输入要从中获得文档或将数据发送到其中的URL:●使用相对路径,如ourpages.html,或绝对路径,例如:http://www.flashmx.com/ourpages page.html。对于“变量”,选择一种方法将已加载影片的变量发送到“URL”文本框中列出的位置上。......
2023-10-30
重分布的命令格式如下:Router# redistribute protocol [protocol-id] { level-1 |level-2 | level-1-2 } {metric metric-value} {metric-type type-value} {match } {tag Tag-value} {route-map map-tag} {weight weight } {subnets}使用distance命令改变可信路由 :distance weight [address mask [access-list-number | name] ] [ip]使用default-metric命令修改缺省度量值 :default-metric number使用distribute-list命令过滤被重分布的路由 :格式1:distribute-list {access-list-number | name} in [type number]格式2:distribute-list {access-list-number | name} out [interface-name |routing - process | autonomous-system-number]......
2023-11-19
将2017年确定为国际可持续旅游发展年的决议遵循了联合国可持续发展大会上各国领导人达成的共识,将以“精心设计和良好管理的旅游”促进可持续发展的三大领域,创造就业并促进贸易往来。文化旅游因其特有的文化内核,在可持续性旅游方面起到了重要作用。文化旅游中的世界遗产,其可持续性发展问题,本就是联合国世界遗产委员会长期以来一直在理论探讨并付诸实践的一个问题。......
2023-11-17
本任务将介绍通过配置静态路由来实现多园区网络连接的技术。静态路由指从网络管理员手工配置路由器的路由信息中获得的路由。静态路由的管理距离为1。当网络规模较大或网络拓扑发生变化时,网络管理员需要随时修改配置,增加了管理难度,因此,静态路由只适用于简单网络环境。六、在R1上配置静态路由在R1上配置到192.168.1.0/24网段的静态路由,并查看路由表。此时,计算机PC1和PC2已连通,完成A区和B区的网络互联。......
2023-11-21
BACnet/IP网络由1个或多个IP子网组成,并且每一个BACnet/IP网络只有1个BACnet网络号。SSPC的IP工作组制定BACnet/IP网络的两种互联方法都采用星形结构。星形结构具有流量瓶颈和风险集中的重大不足,但可以避免BACnet/IP网络多重路由,故选星形结构作为BACnet/IP网络互联的结构是业界公认合理的选择。图5-19 使用“BBMD/路由器”设备实现BACnet/IP网络互联......
2023-08-29
相关推荐