URI 中的段通常遵循 Codeigniter 中的这种模式:
XYZ.com/Class/Method/param1/param2
当在控制器中定义被调用的方法时,这可以按预期工作,但是如果我为 URI 提供一些未定义的方法来调用处理任何未定义方法的 __call 魔术方法,则没有任何作用。
__call 仅在从控制器本身调用时才被调用,而不是当我从 URI 调用某些未定义的方法时
有什么解释吗?
谢谢
URI 中的段通常遵循 Codeigniter 中的这种模式:
XYZ.com/Class/Method/param1/param2
当在控制器中定义被调用的方法时,这可以按预期工作,但是如果我为 URI 提供一些未定义的方法来调用处理任何未定义方法的 __call 魔术方法,则没有任何作用。
__call 仅在从控制器本身调用时才被调用,而不是当我从 URI 调用某些未定义的方法时
有什么解释吗?
谢谢
在 CodeIgniter 中,有_remap
. 所以如果你去
XYZ.com/Class/UndefinedMethod/param1/param2
then_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
}
查看服务器(Apache?)日志文件。毫无疑问,您会看到导致处理中止的 PHP 错误。除非您通过将未定义的函数重新映射到错误页面来覆盖它们,否则随机 URL 将导致“什么都没有”发生。