src/DataFilter/OrderRequestSingleFieldDataFilter.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\DataFilter;
  3. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\AbstractContextAwareFilter;
  4. use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
  5. use App\Request\OrderRequestRequest;
  6. use Doctrine\ORM\QueryBuilder;
  7. class OrderRequestSingleFieldDataFilter extends AbstractContextAwareFilter
  8. {
  9. const ALLOWED_FIELDS = [
  10. 'token' => 'authToken',
  11. 'galab_number' => 'articleNumber',
  12. ];
  13. /**
  14. * @inheritDoc
  15. */
  16. protected function filterProperty(
  17. string $property,
  18. $value,
  19. QueryBuilder $queryBuilder,
  20. QueryNameGeneratorInterface $queryNameGenerator,
  21. string $resourceClass,
  22. string $operationName = null
  23. ) {
  24. $fields = array_keys(self::ALLOWED_FIELDS);
  25. if (!in_array($property, $fields)) {
  26. return;
  27. }
  28. if ($resourceClass !== OrderRequestRequest::class) {
  29. return;
  30. }
  31. $value = $this->normalizeValue($value);
  32. if ($value === null) {
  33. return;
  34. }
  35. $parameterName = $queryNameGenerator->generateParameterName($property);
  36. $where = sprintf('p.%s = :%s', self::ALLOWED_FIELDS[$property], $parameterName);
  37. $queryBuilder
  38. ->andWhere($where)
  39. ->setParameter($parameterName, $value);
  40. }
  41. private function normalizeValue($value)
  42. {
  43. return strval($value);
  44. }
  45. /**
  46. * @inheritDoc
  47. */
  48. public function getDescription(string $resourceClass): array
  49. {
  50. $description = [];
  51. foreach (self::ALLOWED_FIELDS as $field => $propery) {
  52. $description[$field] = [
  53. 'property' => $field,
  54. 'type' => 'string',
  55. 'required' => false,
  56. 'schema' => [
  57. 'type' => $field,
  58. 'description' => sprintf('Filters by the given property %s', $propery),
  59. ],
  60. ];
  61. }
  62. return $description;
  63. }
  64. }