Symfony 调用从变量中获取名称

Symfony call get by Name from variable

我想用数据库中存储的字段名调用 getter。

例如,有一些字段名存储 ['id'、'email'、'name']。

$array=Array('id','email','name');

通常,我会调用 ->getId() 或 ->getEmail()....

这样的话,我就没有机会处理这种事情了。是否有可能将变量作为 get 命令的一部分,例如...

foreach ($array as $item){
   $value[]=$repository->get$item();
}

我可以使用魔法方法吗?这有点令人困惑....

你可以这样做:

// For example, to get getId()
$reflectionMethod = new ReflectionMethod('AppBundle\Entity\YourEntity','get'.$soft[0]);
$i[] = $reflectionMethod->invoke($yourObject);

$yourObject 是您要从中获取 ID 的对象。

编辑:不要忘记使用添加:

use ReflectionMethod;

希望对您有所帮助。

Symfony 提供了一个特殊的 PropertyAccessor 你可以使用:

use Symfony\Component\PropertyAccess\PropertyAccess;

$accessor = PropertyAccess::createPropertyAccessor();

class Person
{
    private $firstName = 'Wouter';

    public function getFirstName()
    {
        return $this->firstName;
    }
}

$person = new Person();

var_dump($accessor->getValue($person, 'first_name')); // 'Wouter'

http://symfony.com/doc/current/components/property_access/introduction.html#using-getters

<?php
// You can get Getter method like this
use Doctrine\Common\Inflector\Inflector;

$array = ['id', 'email', 'name'];
$value = [];

foreach ($array as $item){
    $method = Inflector::classify('get_'.$item);
    // Call it
    if (method_exists($repository, $method))
        $value[] = $repository->$method();
}