2017-10-05 72 views
1

我想通过属性值从对象数组中获取对象。Twig - 通过属性值从数组中获取对象

到目前为止,我只想到循环数组和检查,如果对象值匹配什么我在寻找:

{% for object in objects %} 
    {% if object.name == 'whatever i want' %} 
     {% set wantedObject = object %} 
    {% endif %} 
{% endfor %} 

注:在阵列中的每个对象都有唯一的名称。

有没有一种简单的方法来实现它,而不是使用相同的代码所有的时间?

+1

那邻nly香草'枝'的方式来实现你在做什么。你总是可以扩展'twig'来减少代码 – DarkBee

+1

你可以建立对象的数组,其中的键是对象的名字?如果是这样的话,那么['我想要的']'可以为你工作。 – yceruto

回答

0

也许你必须在视图之前,即在控制器中获得想要的对象? 而不是一个数组,你将所需的对象传递给视图之前。

$wantedObject = $objectRepository->findOneBy(array('name' => 'whatever i want')); 
return $this->render('yourView', array('object' => $wantedObject); 

或者,也许你需要为你考虑到阵列,并做具体的你需要的物体的东西吗?

我会列出数组并将其传递给视图。

行动在你的控制器:

$objectList = $this->createObjectList($aObjects, 'whatever i want'); 
return $this->render('yourView', array('objects' => $objectList); 

功能在你的控制器:

private function createObjectList($objects, $name) 
{ 
    $list = array(); 
    foreach ($objects as $object) { 
     $element = $object; 
     if ($object->getName() === $name) { 
      $list['wantedObject'] = $element; 
     } else { 
      $list[] = $element; 
     } 
    } 
    return $list; 
} 

在枝杈观点:

My wanted object name is: {{ objects.wantedObject.name }}. 
+0

为什么不用'$ list [$ list-> name] = $ element;'和'{{objects ['这是我的名字']}}'就像@yceruto提出的:) – DarkBee

+0

@DarkBee:是的, 那很好。 但是,如果对象'这是我的名字'不存在?你可以{%if objects ['这是我的名字']被定义为%}'但是你的模板有+1深度,对吧? 如果你只想得到几个你的对象?你必须做不同的模板,不是吗? 为每个名字保留。 – Edhrendal