현재 컨트롤러에서로드 방법
-
05-07-2019 - |
문제
알아낼 수없는 문제가 있습니다.
나는 작은 프레임 워크 (연습)를 구축하고 있으며 이제 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
방법.
제휴하지 않습니다 StackOverflow