2014-12-30 68 views
1

我已經搜索如何使用call_user_func_arra與Eloquent方法。但是沒有發現任何線索。 我想在我的Eloquent查詢中使用call_user_func_array方法使我的代碼更加靈活。無法使用Laravel雄辯findOrFail方法使用call_user_func_array函數

代碼不工作: -

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

感謝您的幫助:)

+0

你在使用命名空間嗎? – lukasgeiter

+0

您使用'call_user_func_array'的原因是什麼? – ollieread

+0

@lukasgeiter我使用命名空間。此外,我已經在當前課程中添加了該友誼班。 '使用SiteApp \ Friendship \ Friendship' –

回答

2

顯然call_user_func_array()不關心導入類約use語句,所以你必須使用完全合格的類名:

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

這取決於你r的情況,但最簡單的可能是存儲全名$this->object_type

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