문제

알아낼 수없는 문제가 있습니다.

나는 작은 프레임 워크 (연습)를 구축하고 있으며 이제 Validator 라이브러리를 구축하고 있습니다. "콜백"규칙을 고치려고 할 때를 제외하고는 모든 것이 훌륭하게 작동합니다. 콜백 규칙은 DEV가 유효성 검사기에 존재하지 않는 규칙을 사용해야 할 때 사용됩니다.

내가하는 방법은 다음과 같습니다.

컨트롤러에서 :

$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();

$ 키에서 올바른 방법을 찾을 수 있지만 롤링중인 Wich 컨트롤러를 파악하는 간단한 방법입니까?

URL과 같은 URL을 사용하려고했습니다.

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

그러나 그것은 전혀 효과가 없었습니다 .. 어떤 아이디어?

도움이 되었습니까?

해결책

이것에 접근하는 몇 가지 방법.

먼저, 나는 당신이 어딘가에 URI를 돌리는 코드가 있다고 가정합니다.

example.com/foo

컨트롤러 클래스 이름으로

class FooController

이것을 일반적으로 "라우팅"이라고합니다. 그렇다면 어떻게 든 라우터 클래스/메소드를 유효성 검사기 및/또는 전체 시스템에 노출시킵니다. 이렇게하면 언제든지 URI에서 컨트롤러 이름을 얻을 수 있습니다.

둘째, 유효성 검사기를 인스턴스화 할 때 특정 요청에 대한 컨트롤러 개체에 대한 참조를 제공하십시오. 그런 다음 간단한 전화입니다 get_class_name 또는 반사 API.

셋째, 컨트롤러를 호출과 함께 전달해야합니다. check 방법.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top