Symfony使用eval执行实体方法

时间:2018-05-18 07:58:23

标签: php eval

我正在尝试使用基于字符串的方法运行实体方法。但这似乎不起作用,并给出以下错误:

  

注意:未定义的属性: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>

我该如何做到这一点?

2 个答案:

答案 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));

http://php.net/manual/en/function.call-user-func-array.php