Php 使用控制器魔术方法调用的Codeigniter路由行为

Php 使用控制器魔术方法调用的Codeigniter路由行为,php,codeigniter,url,routing,magic-methods,Php,Codeigniter,Url,Routing,Magic Methods,URI中的段在Codeigniter中通常遵循以下模式: XYZ.com/Class/Method/param1/param2 当在控制器中定义了被调用的方法时,这与预期的一样有效,但是如果我为URI提供一些未定义的方法来调用处理任何未定义方法的_call magic方法,则没有任何效果 __只有在从控制器本身内部调用调用调用时,才调用调用,而不是从URI调用某个未定义的方法时 有什么解释吗 谢谢在CodeIgniter中,有。所以如果你去 XYZ.com/Class/UndefinedMeth

URI中的段在Codeigniter中通常遵循以下模式:

XYZ.com/Class/Method/param1/param2

当在控制器中定义了被调用的方法时,这与预期的一样有效,但是如果我为URI提供一些未定义的方法来调用处理任何未定义方法的_call magic方法,则没有任何效果

__只有在从控制器本身内部调用调用调用时,才调用调用,而不是从URI调用某个未定义的方法时

有什么解释吗

谢谢

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

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
}
在CodeIgniter中,有一个。所以如果你去

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
}

看看Apache服务器?日志文件。毫无疑问,您将看到导致处理中止的PHP错误。除非通过将未定义的函数重新映射到错误页来覆盖它们,否则随机URL将不会导致任何事情发生。

查看Apache服务器?日志文件。毫无疑问,您将看到导致处理中止的PHP错误。除非您通过将未定义的函数重新映射到错误页来覆盖它们,否则随机URL似乎不会导致任何事情发生。

\u重新映射可以工作,但无论URI包含什么,它总是被调用。无论是否定义了被调用的方法。。我只需要处理未定义的方法,再加上为什么u调用在第一位不起作用?是的,_remap总是会被调用,不过我添加了一些代码,应该为您解决这个问题__调用不起作用,因为CodeIgniter就是这样工作的_调用在模型和库中工作,但在控制器中不工作。这就是为什么会有重新映射。我不想调用已定义的函数。我只是希望它能处理任何未定义的函数_remap不是一个_调用,它们是不同的,但是因为这是codeigniter工作的唯一方式,所以问题就解决了。是的,codeigniter可能有点奇怪,这就是它的工作方式:-remap工作,但是不管你的URI包含什么,它总是被调用。无论是否定义了被调用的方法。。我只需要处理未定义的方法,再加上为什么u调用在第一位不起作用?是的,_remap总是会被调用,不过我添加了一些代码,应该为您解决这个问题__调用不起作用,因为CodeIgniter就是这样工作的_调用在模型和库中工作,但在控制器中不工作。这就是为什么会有重新映射。我不想调用已定义的函数。我只是希望它能处理任何未定义的函数_remap不是一个uu调用,它们是不同的,但因为这是codeigniter工作的唯一方式,所以问题就解决了。是的,codeigniter可能有点奇怪,它就是这样工作的:-