2017-12-21 4 views
1

PHP에서 Klein 라우터를 구현하고 있는데 약간의 문제가 있습니다 ... $ 컨트롤러가 제공하는 특별한 기능을 $ controller 변수에 지정하고 싶습니다. 같은 : catch되지 않은 InvalidArgumentException을 :PHP klein 라우터는 특별한 컨트롤러 기능을 호출합니다.

$klein->respond('GET', '/[i:id]?', HomeController::view($request)); 

그러나 나는 오류를 가지고 호출을 예상. 나는 내 코드를 변경 있도록 uncallable NULL을 얻었다 :

$klein->respond('GET', '/[i:id]?', new HomeController::view($request)); 

지금 오류이 하나입니다 구문 오류, 예기치 않은 '보기'(T_STRING), 변수 (T_VARIABLE을) 기대 또는 '$' 마지막으로 나는이 같은 내 코드를을 writting 해결책을 발견 :이 하나가 작동하지만 난 뭔가를 누락 느낄

$klein->respond('GET', '/[i:id]?', function($request){ HomeController::view($request); }); 

... 내가 이것을 인수 분해 싶습니다을, 어떤 솔루션이 무엇입니까? 감사합니다 당신

+0

나는 결코 Klein을 사용하지 않았다 : 당신은'public static method view ($ request) {...}'를 가진 HomeController *라는 클래스를 가지고 있는가? –

+0

예, 미안 해요. 아마도 플러그인 작성자에게 직접 물어 봐야 할 것 같아서요. 사실 제 질문은 '분해 할 수 있습니다'라고 생각하기 때문에, 작동하도록 만드는 방법을 찾았습니다. –

답변

0

이 시도 : 클라인의 예에서

$klein->respond('GET', '/[i:id]?', array('HomeController','view')); 

를, 세 번째 예제에서, 우리는 폐쇄, 또는 익명 함수, 람다, 그렇지 않으면 당신이 무엇을 원하는을 통과하는 것처럼 불러라. 어쨌든 우리는 인라인을 선언하기 때문에 매개 변수를 지정해야합니다.

한편, HomeController::view은 자체 선언에 지정된 인수가 있습니다. 첫 번째 예제와 두 번째 예제에서와 같이 인수를 인라인하면 실제로 해당 라인에서 view 함수가 호출됩니다. 나중에 호출 할 $klein에 함수를 전달하고 싶습니다. 위의 예제에서 수행해야합니다.

클라인의 respond 함수는 PHP가 호출 할 수있는 것을 사용합니다.

http://php.net/manual/en/language.types.callable.php

당신이 $klein->respond('GET', '/[i:id]?', HomeController::view);을 할 수있는 생각하지만 올바른 것으로 표시되지 않습니다 : 그것은 PHP에서 호출을 지정하는 백만 가지 방법이있다 밝혀졌습니다. 그것은 파이썬에서는 작동하지만 PHP에서는 작동하지 않습니다. 오 잘.

$klein->respond('GET', '/[i:id]?', ['HomeController','view']); 

이 좀 더 컴팩트하게 :

당신이 PHP 5.4을 사용하는 경우 또는 나중에, 당신은 짧은 배열 구문을 사용할 수 있습니다.

+0

이것은 그 것이다, 나는 그것을 완전히 찾고 있었다, 당신에게 많이 감사한다! –

+0

당신은 아주 환영합니다. 천만에요! – eimajenthat

관련 문제