如果你的控制包含一個 _remap() 方法,那么無論 URI 中包含什么參數時都會調用該方法。 它允許你定義你自己的路由規則,重寫默認的使用 URI 中的分段來決定調用哪個方法這種行為。
很簡單,如果有_remap
存在,那么它始終會被調用,你如你在url
中指定的A
方法,可以在此函數中讓程序實際執行B
方法。
舉個例子,比如 我可以讓某些方法公用一個url地址
GET /comments
列出所有評論
POST /comments
創建新評論
如果沒有_remap
, 我可以在一個方法中,判斷請求方式,如果是GET
執行列出評論的方法,如果是POST
就執行創建評論的邏輯。
有了_remap
就可以單獨兩個方法控制,比如:
public function comments($params)
{
//list comments
}
public function _comments_posts($params)
{
//此方法屬于CI私有控制器方法,不能通過url直接請求,可以起到保護方法的作用
//add comments
}
public function _remap($method, $params = [])
{
if ($_SERVER["REQUEST_METHOD"] == 'GET') {
return call_user_func_array([$this, $method], $params);
} elseif ($_SERVER["REQUEST_METHOD"] == 'POST') {
return call_user_func_array([$this, '_'.$method.'_post'], $params);
}
}
當然,還有其他用途,可以按照需求具體使用。