我正在尝试使用基于字符串的方法运行实体方法。但这似乎不起作用,并给出以下错误:
注意:未定义的属性:AppBundle \ Entity \ User :: $ setName
在控制器中
<link rel="stylesheet" href="css/bootstrap.min.css">
<div>
<ul class="nav nav-tabs">
<li class="nav-item"><a class="nav-link active" href="#first" data-toggle="tab">1</a></li>
<li class="nav-item"><a class="nav-link" href="#second" data-toggle="tab">2</a></li>
</ul>
</div>
我该如何做到这一点?
答案 0 :(得分:3)
首先,您必须将$method
变量更改为简单的函数/方法名称,然后您可以像最后一行一样对其进行评估
$user = $this->getDoctrine()->getRepository("AppBundle:User")->find(1);
$value = "Peter";
// Just the method name
$method = "setName";
// This is a valid evaluation passing a variable
$user->{$method}($value);
答案 1 :(得分:1)
Jack Skeletron的回答更接近你想要做的事情,但你也可以用call_user_func_array
函数来做:
$user = $this->getDoctrine()->getRepository("AppBundle:User")->find(1);
$method = 'setName';
$value = 'Peter';
call_user_func_array(array($user, $method), array($value));