2014-12-30 1 views
1

call_user_func_arra y를 Eloquent 메서드로 사용하는 방법을 검색했습니다. 그러나 그것에 대한 단서를 찾지 못했습니다. Eloquent 쿼리에서 call_user_func_array 메소드를 사용하여 코드를보다 유연하게 만들고 싶습니다.call_user_func_array 함수를 사용하여 Laravel Eloquent findOrFail 메서드를 사용할 수 없습니다.

코드가 작동하지 않습니다 : -

$object = call_user_func_array($this->object_type . '::findOrFail', [$this->object_slug]); 

오류 : -

ErrorException (E_UNKNOWN) call_user_func_array는() 매개 변수 1 유효한 콜백 클래스 '우정'하지 될 것으로 예상 녹이다.

하지만이 방법을 call_user_func_array 사용하지하고 있다면, 내 아래의 코드가 잘 실행 -

$object = Friendship::find($this->object_slug); 

정적 콜백 방법은 call_user_func_array 기능을 사용할 수 있는지 저를 안내하세요? 그렇지 않다면 다른 대안을 제안하십시오. 해결


문제 : -

call_user_func_array 방법에 대한 use namespaces을 걱정하지 않는다. 따라서 네임 스페이스의 경우 클래스의 전체 경로를 추가합니다.

업데이트 코드 : - 당신은 정규화 된 클래스 이름을 사용할 필요가 있도록 도움을

call_user_func_array('\SiteApp\Friendship\\' . $this->object_type . '::findOrFail', [$this->object_slug]);

감사합니다 :) 분명히 call_user_func_array()

+0

네임 스페이스로 작업 하시겠습니까? – lukasgeiter

+0

'call_user_func_array'를 사용하는 이유는 무엇입니까? – ollieread

+0

@lukasgeiter 나는 네임 스페이스를 사용하고 있습니다. 또한 저는 이미 현재 수업에서 우정 수업을 추가했습니다. 'Use SiteApp \ Friendship \ Friendship' –

답변

2

클래스를 가져 오기에 대한 use 문을 상관하지 않는다 :

call_user_func_array('\SiteApp\Friendship\Friendship::findOrFail', [$this->object_slug]); 

당신에게 달려 있습니다. 가장 간단한 방법은 전체 이름을 $this->object_type에 저장하는 것입니다.

// $this->object_type = '\SiteApp\Friendship\Friendship'; 
call_user_func_array($this->object_type . '::findOrFail', [$this->object_slug]);