Php 电流控制器的加载方法

Php 电流控制器的加载方法,php,class,frameworks,controller,Php,Class,Frameworks,Controller,我有一个我想不出来的问题 我正在构建一个小框架(实践),现在我正在构建验证器库。除了我试图修正“回调”规则外,一切都非常顺利。当开发人员需要使用验证程序库中不存在的规则时,使用回调规则 我是这样做的 在控制器中: $this->validator->check('req|callback:test', $_POST['module_name'], 'Module Name'); 验证程序类: public function check($rules, $input, $fieldn

我有一个我想不出来的问题

我正在构建一个小框架(实践),现在我正在构建验证器库。除了我试图修正“回调”规则外,一切都非常顺利。当开发人员需要使用验证程序库中不存在的规则时,使用回调规则

我是这样做的

在控制器中:

$this->validator->check('req|callback:test', $_POST['module_name'], 'Module Name');
验证程序类:

public function check($rules, $input, $fieldname='') {
    $rule = explode('|', $rules);
    foreach ($rule as $r) {
        $request = explode(":",$r,2);
        $method = array_shift($request);
        $parameter = $request;
        array_unshift($parameter,$input);   
        array_push($parameter,$fieldname);
        if (method_exists($this, $method)) {
            call_user_func_array(array($this,$method), $parameter);
        }
  }

protected function callback($input, $key, $fieldname='') {

}
我的问题是,如何使用“当前”控制器。例如,在这种情况下,我需要找到:

UserController::test();
我可以在$key中找到正确的方法,但这是一个简单的方法来确定正在运行的控制器吗

我尝试使用如下url:

$controller = ucfirst($uri->uri[1]).'Controller';
$controller::$key();

但那根本不起作用。。有什么想法吗?

有几种不同的方法

首先,我假设在某个地方有一些代码可以转换URI

example.com/foo
转换为控制器类名

class FooController
这通常称为“路由”。如果是这样,请以某种方式向验证器和/或整个系统公开路由器类/方法。这将允许您随时从URI获取控制器的名称

第二,在实例化验证器时,为它提供对特定请求的控制器对象的引用。然后,只需调用
获取类名称
或反射API即可


第三,要求将您的控制器与您对
check
方法的调用一起传递。

我现在让它工作,我可以验证来自当前控制器的回调,但是,当我尝试设置错误消息时,如:$this->validator->set_error(“回调错误消息”);它不会保存在validator类的错误数组中。这是为什么?用call_user_func()解决了这个问题:)谢谢。