在think php框架中,路由是指將url地址映射到對(duì)應(yīng)的處理方法上的過(guò)程。默認(rèn)情況下,think php框架采用的是基于url地址中的參數(shù)來(lái)判斷路由的方式,但是在實(shí)際應(yīng)用中,我們有時(shí)需要自定義路由規(guī)則。本文將介紹如何在think php框架中修改路由規(guī)則。
一、路由的基本概念
在Think PHP框架中,每個(gè)網(wǎng)址都可以被認(rèn)為是一個(gè)請(qǐng)求,這個(gè)請(qǐng)求會(huì)被Think PHP框架中的路由機(jī)制進(jìn)行解析,從而找到對(duì)應(yīng)的處理方法。而路由機(jī)制主要是為了實(shí)現(xiàn)請(qǐng)求與處理方法之間的匹配。
Think PHP框架提供了很多路由方式,如:基于URL參數(shù)、基于配置文件、基于注解、基于模型等。這些方式都可以實(shí)現(xiàn)路由的自定義,以滿足實(shí)際業(yè)務(wù)需求。
二、thinkphp框架中的路由規(guī)則
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
1.基本路由規(guī)則
默認(rèn)情況下,Think PHP框架中的路由規(guī)則是基于URL參數(shù)的,即路由規(guī)則和URL參數(shù)名稱一一對(duì)應(yīng)。例如,在以下URL中,參數(shù)a對(duì)應(yīng)著路由規(guī)則中的控制器名稱,參數(shù)b對(duì)應(yīng)著路由規(guī)則中的方法名稱。
http://hostName/index.php?c=a&m=b
2.簡(jiǎn)化路由規(guī)則
Think PHP框架中還提供了簡(jiǎn)化路由規(guī)則的功能,這種方式可以讓URL更加美觀,便于用戶理解。例如,我們可以將上面的URL改為以下形式。
http://hostName/index.php/a/b
其中,a表示控制器名稱,b表示方法名稱。
這種方式可以通過(guò)設(shè)置配置文件來(lái)實(shí)現(xiàn):
'URL_ROUTER_ON' => true, 'URL_ROUTE_RULES'=>array( '/^a/b$/'=>'index/a/b', // …… )
此時(shí),我們?cè)L問(wèn)的URL地址會(huì)被解析為index控制器下的a方法。
3.高級(jí)路由規(guī)則
如果我們需要更加靈活地自定義路由規(guī)則,就需要使用基于模型的路由功能。這種方式需要繼承一些基本模型,例如ThinkModel、AdvModel等,然后在路由規(guī)則中使用模型的屬性和方法。例如:
'URL_MODEL' => '2', 'URL_ROUTER_ON' => true, 'URL_ROUTE_RULES'=>array( ':named' => '/user/detail', ':named/:str' => '/user/detail?str=:2'; 'topic/:idd' => '/topic?id=:1', )
其中,:name和:id都表示路由規(guī)則中的參數(shù)名稱。
三、ThinkPHP框架中修改路由規(guī)則的方法
修改路由規(guī)則可以通過(guò)多種方式實(shí)現(xiàn),主要包括以下三種。
1.通過(guò)配置文件修改路由規(guī)則
我們可以在配置文件中設(shè)置URL_ROUTE_RULES、URL_ROUTER_ON等屬性,從而實(shí)現(xiàn)路由規(guī)則的自定義。在上面的示例中,我們就對(duì)相應(yīng)的屬性進(jìn)行了設(shè)置。
2.通過(guò)繼承ThinkController類自定義路由規(guī)則
我們可以在自己的控制器類中繼承ThinkController類,并重寫(xiě)其__call()方法,通過(guò)解析URL參數(shù)來(lái)實(shí)現(xiàn)路由規(guī)則的自定義。例如:
class MyController extends ThinkController{ public function _call($method, $args) { if ($method=="a") { $this->index($args[0]); } } public function index($str){ echo "hello ".$str; } }
3.通過(guò)使用ThinkRoute類自定義路由規(guī)則
ThinkRoute類是Think PHP框架中定義路由規(guī)則所用的類,通過(guò)使用該類,我們可以靈活地自定義路由規(guī)則。例如:
use ThinkRoute; Route::rule('hello/:name','index/user/hello');
以上代碼將會(huì)把hello/:name路由到index控制器的user模塊下面的hello方法。
總結(jié)
總之,Think PHP框架中的路由規(guī)則非常靈活,可以根據(jù)不同的業(yè)務(wù)需求進(jìn)行自定義設(shè)置。本文介紹了基本路由規(guī)則、簡(jiǎn)化路由規(guī)則、高級(jí)路由規(guī)則和修改路由規(guī)則的方法,相信通過(guò)本文的學(xué)習(xí),讀者已經(jīng)可以掌握Think PHP框架中路由規(guī)則的基本使用方法。