/**
  * @param string $fieldType
  *
  * @return string
  */
 protected function getIdFieldRequirement($fieldType)
 {
     $result = $this->valueNormalizer->getRequirement($fieldType, [RequestType::REST, RequestType::JSON_API]);
     if (ValueNormalizer::DEFAULT_REQUIREMENT === $result) {
         $result = '[^\\.]+';
     }
     return $result;
 }
예제 #2
0
 /**
  * @param ApiDoc           $annotation
  * @param FilterCollection $filters
  */
 protected function addFilters(ApiDoc $annotation, FilterCollection $filters)
 {
     foreach ($filters as $key => $filter) {
         if ($filter instanceof StandaloneFilter) {
             $options = ['description' => $filter->getDescription(), 'requirement' => $this->valueNormalizer->getRequirement($filter->getDataType(), [RequestType::REST, RequestType::JSON_API], $filter->isArrayAllowed())];
             $default = $filter->getDefaultValueString();
             if (!empty($default)) {
                 $options['default'] = $default;
             }
             $annotation->addFilter($key, $options);
         }
     }
 }
예제 #3
0
 /**
  * @param Route  $route
  * @param string $entityClass
  */
 protected function setIdRequirement(Route $route, $entityClass)
 {
     $metadata = $this->doctrineHelper->getEntityMetadataForClass($entityClass);
     $idFields = $metadata->getIdentifierFieldNames();
     $idFieldCount = count($idFields);
     if ($idFieldCount === 1) {
         // single identifier
         $route->setRequirement(self::ID_ATTRIBUTE, $this->valueNormalizer->getRequirement($metadata->getTypeOfField(reset($idFields)), [RequestType::REST, RequestType::JSON_API]));
     } elseif ($idFieldCount > 1) {
         // combined identifier
         $requirements = [];
         foreach ($idFields as $field) {
             $requirements[] = $field . '=' . $this->valueNormalizer->getRequirement($metadata->getTypeOfField($field), [RequestType::REST, RequestType::JSON_API]);
         }
         $route->setRequirement(self::ID_ATTRIBUTE, implode(RestRequest::ARRAY_DELIMITER, $requirements));
     }
 }
예제 #4
0
 /**
  * @dataProvider getArrayRequirementProvider
  */
 public function testGetArrayRequirement($expectedValue, $dataType, $requestType)
 {
     $result = $this->valueNormalizer->getRequirement($dataType, $requestType, true);
     $this->assertSame($expectedValue, $result);
 }