Codeigniter路由行为与控制器魔术方法__call

时间:2012-08-17 20:56:51

标签: php codeigniter url routing magic-methods

URI中的段通常遵循Codeigniter中的这种模式:

XYZ.com/Class/Method/param1/param2

当在控制器中定义被调用的方法时,这可以正常工作,但是如果我为URI提供一些未定义的方法来调用处理任何未定义方法的__call魔术方法,则无效。

__调用仅在从控制器本身调用时调用,而不是在我从URI调用某些未定义的方法时调用

有任何解释吗?

由于

2 个答案:

答案 0 :(得分:4)

在CodeIgniter中,有_remap。所以,如果你去

  

XYZ.com/Class/UndefinedMethod/param1/param2

然后将调用_remap(实际上_remap将始终被调用,因此我们需要确保正确调用存在的方法。)

function _remap($method, $params=array()){
    $funcs = get_class_methods($this);
    if(in_array($method, $funcs)){ // We are trying to go to a method in this class
        return call_user_func_array(array($this, $method), $params);
    }
    // else do something else
}

答案 1 :(得分:0)

查看服务器(Apache?)日志文件。毫无疑问,您会看到导致处理中止的PHP错误。除非您通过将未定义的函数重新映射到错误页面来覆盖未定义的函数,否则随机URL似乎会导致“无”。