2017-10-05 182 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