/**
  * Resolves tableHeaders and additional filters into a single array of
  * Zend ElementInterface forms
  *
  * @return ElementInterface[]
  */
 protected function getFilterElements()
 {
     $elements = array();
     // Get all filters that can be placed above a header
     foreach ($this->tableHeaders as $tableHeader) {
         $filter = $tableHeader->getFilter();
         // Are you a extra configured filter, good we'll call you directly
         if (!is_null($filter->getInstance())) {
             $filterElement = $filter->getInstance()->getFilterElement();
             $filterElement->setName('search[' . $filterElement->getName() . ']');
             $elements[] = $filterElement;
             continue;
         }
         // No filter instance has been configured, create a new FormElement throughout the strategy resolver
         $dataType = $tableHeader->getDataType();
         if ($this->tableModel->getPrefetchedValuesByName($tableHeader->getName())) {
             $dataType = "Array";
         }
         $filterName = 'search[' . $filter->getName() . ']';
         $element = $this->dataStrategyResolver->displayFilterForDataType($filterName, $dataType);
         $this->setElementCurrentValue($element, $tableHeader->getSafeName());
         if ($dataType == "Array") {
             $this->setElementValues($element, $tableHeader->getName());
         }
         $elements[] = $element;
     }
     // Append additional filters
     foreach ($this->additionalFilters as $filter) {
         $filterElement = $filter->getInstance()->getFilterElement($filter);
         $filterElement->setName('search[' . $filterElement->getName() . ']');
         $elements[] = $filterElement;
         continue;
     }
     return $elements;
 }