Пользовательский параметр запроса для платформы API - PullRequest
0 голосов
/ 10 июля 2020

Я использую api-платформу с Elasticsearch в качестве источника данных. Используя фильтры, вы указываете свойство объекта, которое хотите отфильтровать. Затем он отображается как параметр запроса в API.

Есть ли способ сопоставить другое имя для параметра запроса?

Итак, вместо раскрытия имени свойства модели «updatedDate» вместо этого вы могли бы просто использовать «дату»?

например, GET / products? updatedDate = today становится GET / products? date = today, но под ним все еще фильтруется обновленная дата?

1 Ответ

0 голосов
/ 10 июля 2020

Вы можете расширить используемый фильтр. Например, если вы используете DateFilter для свойства updatedDate, ваш класс может выглядеть так:

namespace App\Filter;

use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;

final class UpdatedDateFilter extends DateFilter
{

    /** @param mixed $values */
    protected function filterProperty(string $property, $values, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void
    {
        if ($property === 'date') {
            $property = 'updatedDate';
        }

        parent::filterProperty($property, $values, $queryBuilder, $queryNameGenerator, $resourceClass, $operationName)
    }
}

И использовать его для своей сущности:

use App\Filter\UpdatedDateFilter;

/**
* @ApiFilter(UpdatedDateFilter::class, properties={"date"})
*/
class Product 
{ .... }
...