Глядя на ваш пример (example.com/api/categories?limit=20&offset=300&filter=something
), я думаю, ваше действие будет выглядеть примерно так:
public function getCategories(?int $limit, ?int $offset, ?string $filter)
{
//...
}
Проверка коллекции
Вы можете определить свои ограничения в виде массива (и позжеабстрагируйте его в свой собственный класс) и передайте в качестве второго аргумента вашему валидатору.
$constraint = new Assert\Collection([
'limit' => [
new Assert\Range(['min' => 0, 'max' => 999]),
new Assert\DivisibleBy(0.5)
],
'offset' => new Assert\Range(['min' => 0, 'max' => 999]),
'filter' => new Assert\Regex("/^\w+/")
]);
$validationResult = $this->validator->validate(
['limit' => $limit, 'offset' => $offset, 'filter' => $filter],
$constraint
);
Документация ссылка .
Проверка по одному
Передайте ограничение валидатору в качестве второго аргумента для каждого параметра, который вы хотите проверить.
$offsetValidationResult = $this->validator->validate(
$offset,
new Assert\Range(['min' => 0, 'max' => 999])
);
//...
Документация ссылка .
Проверка объекта
Создайте класс с тремя полями в нем.
class FilterParameters
{
public function __construct($limit, $offset, $filter)
{
$this->limit = $limit;
$this->offset = $offset;
$this->filter = $filter;
}
// No getters/setters for brevity
/**
* @Assert\DivisibleBy(0.25)
*/
public $limit;
/**
* @Assert\Range(min = 0, max = 999)
*/
public $offset;
/**
* @Assert\Regex("/^\w+/")
*/
public $filter;
}
Создайте и подтвердите его.
$validationResult = $this->validator->validate(
new FilterParameters($limit, $offset, $filter)
);
Документация ссылка .