在閱讀《thinkphp5.0快速入門》這本書時,模型基礎這一節碰到一點路由上的問題。在此隨筆記一下。
碰到的問題:
Controller.php
public function read($id=''){
$user = Usermodel::get($id);
echo "-----------function read() running...-----------<br/>";
echo "id : ".$id."<br/>";
echo $user->nickname.'<br/>';
echo $user->email.'<br/>';
echo date('Y/m/d', $user->birthday).'<br/>';
}
public function read2($id=''){
$user = Usermodel::get($id);
echo "-----------function read2() running...-----------<br/>";
echo "id : ".$id."<br/>";
echo $user['nickname']."<br/>";
echo $user['email']."<br/>";
echo date('Y/m/d', $user['birthday'])."<br/>";
}
碰到這個問題,是因為在路由中添加了與教程不一樣的路由規則。教程中定義了一條規則:
'user/:id' => 'index/user/read',
這樣在瀏覽器輸入http://www.mjtest.com/user/3, 就能訪問到read方法。
我在read方法后面又新增了一個read2方法,為了訪問到這個方法,在路由規則后面新增了一條:
'user/read2/:id' => 'index/user/read2'
也就是說,現在的路由規則最后兩行是
'user/:id' => 'index/user/read',
'user/read2/:id' => 'index/user/read2',
這樣在瀏覽器輸入http://www.mjtest.com/user/read2/3,並沒有按預期去訪問read2方法,實際上這個url在順序讀取路由規則時,
先讀取到'user/:id' => 'index/user/read'這條規則,就認為url是符合這條規則的。就把read2,3當成兩個參數傳遞給了read方法
瀏覽器輸入結果如圖
從圖中結果可以知道,服務器實際上訪問到了read方法里。
將路由修改如下:
route.php
'user/read2/:id' => 'index/user/read2',
'user/:id' => 'index/user/read',
訪問url:http://www.mjtest.com/user/read2/3
訪問結果:
-----------function read2() running...-----------
id : 3
流年
liunian@qq.com
1977/03/05
這樣就正確訪問到read2方法了。