/**
  * Loop through configuration to discover and set controller options.
  *
  * @param  array $config
  * @param  ResourceController $controller
  */
 protected function setControllerOptions(array $config, ResourceController $controller)
 {
     foreach ($config as $option => $value) {
         switch ($option) {
             case 'accept_criteria':
                 $controller->setAcceptCriteria($value);
                 break;
             case 'collection_http_options':
                 $controller->setCollectionHttpOptions($value);
                 break;
             case 'collection_name':
                 $controller->setCollectionName($value);
                 break;
             case 'collection_query_whitelist':
                 if (is_string($value)) {
                     $value = (array) $value;
                 }
                 if (!is_array($value)) {
                     break;
                 }
                 // Create a listener that checks the query string against
                 // the whitelisted query parameters in order to seed the
                 // collection route options.
                 $whitelist = $value;
                 $controller->getEventManager()->attach('getList.post', function ($e) use($whitelist) {
                     $request = $e->getTarget()->getRequest();
                     if (!method_exists($request, 'getQuery')) {
                         return;
                     }
                     $query = $request->getQuery();
                     $params = array();
                     foreach ($query as $key => $value) {
                         if (!in_array($key, $whitelist)) {
                             continue;
                         }
                         $params[$key] = $value;
                     }
                     if (empty($params)) {
                         return;
                     }
                     $collection = $e->getParam('collection');
                     $collection->setCollectionRouteOptions(array('query' => $params));
                 });
                 break;
             case 'content_types':
                 $controller->setContentTypes($value);
                 break;
             case 'identifier_name':
                 $controller->setIdentifierName($value);
                 break;
             case 'page_size':
                 $controller->setPageSize($value);
                 break;
             case 'page_size_param':
                 $controller->setPageSizeParam($value);
                 break;
             case 'resource_http_options':
                 $controller->setResourceHttpOptions($value);
                 break;
             case 'route_name':
                 $controller->setRoute($value);
                 break;
         }
     }
 }