thinkphp中的url引數傳值問題
阿新 • • 發佈:2019-01-02
<?php
namespace app\index\controller;
class Index{
public function index(){
return '我是index';
}
public function hello($name='World'){
return 'Hello'.$name.'!';
}
}
?
當我們訪問:
localhost/tp/index.php/index/index/hello
時就是訪問index分組下的Index控制器下的hello方法;
此時的訪問並沒有傳入任何引數,所以name引數值就是World。
輸出結果則是: HelloWorld!
如果向name方法傳入引數,則在位址列name後面加上 ‘/引數值’
如:
localhost/tp/index.php/index/index/hello/name/Thinkphp
則輸出結果為:HelloThinkphp!
若是有兩個引數,如:
<?php
namespace app\index\controller;
class Index{
public function index(){
return '我是index';
}
public function hello($name='World',$age=''){
return 'Hello'.$name.'!Your age is'.$age.'.';
}
}
?>
當我們訪問:
localhost/tp/index.php/index/index/hello/name/Thinkphp/age/17
時,訪問結果為,HelloThinkphp!Your age is 17.
如果將兩引數位置變換,訪問順序為:
localhost/tp/index.php/index/index/hello/age/17/name/Thinkphp
則訪問結果不做改變。
可以得出結論是方法會自動獲取URL地址中的同名引數值作為方法的引數值,而且這個引數的傳入順序不受URL引數順序的影響。
若是想明確引數順序的話,則可以把應用配置檔案中的url_param_type引數的值修改如下:
// 按照引數順序獲取'url_param_type' => 1
現在,URL的引數傳值方式就變成了嚴格按照操作方法的變數定義順序來傳值了,也就是說我們必須使用下面的URL地址訪問才能正確傳入:
localhost/tp/index.php/index/index/hello/Thinkphp/17
若是使用:
localhost/tp/index.php/index/index/hello/name/Thinkphp/age/17
這種訪問方式則會出現錯誤。
但是用:
localhost/tp/index.php/index/index/hello?name=thinkphp&city=shanghai
這種方法依舊也是可以的。注意:
按順序繫結引數的話,操作方法的引數只能使用URL pathinfo變數,而不能使用get或者post變數。