一、問題描述
在我們使用Thinkphp進行開發(fā)時,有時會遇到這樣的情況:當(dāng)我們進行一些路由操作時,頁面并未跳轉(zhuǎn)至我們所期望的界面。
例如,我們希望通過URL“www.example.com/home/do”來訪問“HomeController.php”中的“do”方法,但我們實際上卻無法訪問到此方法。同時,我們發(fā)現(xiàn)并沒有報錯信息出現(xiàn),這就讓我們無從下手。
二、原因分析
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
在thinkphp中,路由是通過URL后綴進行匹配的。如果在我們的URL中沒有使用任何后綴,那么ThinkPHP將認(rèn)為我們要訪問的方法是控制器中的默認(rèn)方法(默認(rèn)方法名一般為“index”)。
例如,我們使用URL“www.example.com/home/index”時,就會默認(rèn)訪問“HomeController.php”中的“index”方法。
而當(dāng)我們使用URL“www.example.com/home/do”時,由于沒有使用任何后綴,ThinkPHP就會認(rèn)為我們要訪問的是“index”方法,同時由于“do”方法并不存在于控制器中,所以就會導(dǎo)致頁面訪問失敗。
三、解決方法
1.使用“/”后綴
如果在URL末尾添加斜杠“/”,就可以避免出現(xiàn)路由不匹配的情況。例如,我們可以使用URL“www.example.com/home/do/”來訪問“HomeController.php”中的“do”方法。
同時,我們在使用ThinkPHP進行開發(fā)時,推薦在配置文件config.php中將URL后綴設(shè)置為“/”,這樣可以避免出現(xiàn)路由不轉(zhuǎn)換的問題。
2.修改路由規(guī)則
我們也可以通過修改路由規(guī)則來解決問題。
首先,在我們的路由配置文件中(一般為route.php),我們可以將路由規(guī)則定義為:
return?[ ????'home/do/[:id]'?=>?'home/[:action]', ];
這樣,我們就可以通過URL“www.example.com/home/do/1”來訪問“HomeController.php”中的“do”方法,并在URL中傳遞一個id參數(shù)。