getter/setter Class 来自 Symfony 中的 $variable w/out switch/if?

getter/setter Class from $variable w/out switch/if in Symfony?

我正在使用 table 编辑开关,我想将它集成到 Symfony 中。 这是我正在谈论的脚本:LINK

现在这个脚本发送我可以在 symfony 中接收的请求。

发件人

<a href="#" id="Username" data-type="text" data-pk="1" data-url="/post/table1" data-title="Enter username">superuser</a>

接收器 (/post)

if($table == "table1"){
    $repo = "AppBundle:Table1";
}
...
/* Get correct repo/entry */
$repo = $em->getRepository($repo)->find($request->get('pk'));

这在某种程度上未经测试,但我想应该可以。

现在我想更新 id="Username"

发送的相应列

我现在想实现的是这样的:(我知道这行不通) $repo->set.$request->get('id')('blabla')

我可以使用开关,但那需要很大。

还有其他方法吗?

PS: 我知道这样发送值不是很安全,但仅供个人使用。

如果您想从您的请求值调用 setter,以下代码将起作用:

$setter = 'set'.$request->request->get('id'); // is now equal to 'setUsername'
$repo->$setter('blabla'); // Assuming $repo is the entity retrieved by find();

此外,symfony 有一个干净的方法,称为 PropertyAccess,您只需要 属性 您想要 set/get 的名称。

示例:

use Symfony\Component\PropertyAccess\PropertyAccessor;
// ...
$accessor = PropertyAccess::createPropertyAccessor();

// If the property 'username' is writable, set it
if ($accessor->isWritable($repo, 'username') {
    $accessor->setValue($repo, $request->request->get('id'), 'blabla');
}

Symfony PropertyAccess