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();
}
我想用数据库中存储的字段名调用 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();
}