/** * 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; } } }
public function testAllowsInjectingContentTypesForRequestMarshalling() { $types = array(ResourceController::CONTENT_TYPE_JSON => array('application/api-problem+json', 'text/json')); $controller = new ResourceController(); $controller->setContentTypes($types); $this->assertAttributeEquals($types, 'contentTypes', $controller); }