2014-12-30 44 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]);