From api-platform
Génère des filtres API Platform (search, date, range, order, boolean, exists, custom)
How this skill is triggered — by the user, by Claude, or both
Slash command
/api-platform:make-filtersonnetThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Génère des filtres pour une resource API Platform : filtres Doctrine intégrés (SearchFilter, DateFilter, RangeFilter, etc.) ou filtres personnalisés.
Génère des filtres pour une resource API Platform : filtres Doctrine intégrés (SearchFilter, DateFilter, RangeFilter, etc.) ou filtres personnalisés.
src/Entity/{ResourceName}.php (ajout des attributs de filtre)src/Filter/{FilterName}Filter.php (si filtre custom)IMPORTANT : Exécute ce workflow étape par étape :
$ARGUMENTS est fourni, utiliser comme nom de la resourceQuestion: "Sur quelle resource ajouter des filtres ?"
Header: "Resource"
src/Entity/{ResourceName}.php existe avec GlobQuestion: "Quels types de filtres ajouter ?"
Header: "Filtres"
Options:
- "SearchFilter" : "Recherche textuelle (partial, exact, start, end, word_start)"
- "OrderFilter" : "Tri sur les propriétés (ASC/DESC)"
- "DateFilter / RangeFilter / BooleanFilter / ExistsFilter" : "Filtres typés selon les propriétés"
- "Filtre personnalisé" : "Classe de filtre custom avec logique métier"
Pour SearchFilter :
partial — Recherche contenant (LIKE %value%)exact — Correspondance exactestart — Commence par (LIKE value%)end — Finit par (LIKE %value)word_start — Mot commençant paripartial — Recherche partielle insensible à la cassePour OrderFilter :
Pour DateFilter :
Pour RangeFilter :
Ajouter les attributs sur la classe de la resource :
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
use ApiPlatform\Doctrine\Orm\Filter\ExistsFilter;
use ApiPlatform\Metadata\ApiFilter;
#[ApiFilter(SearchFilter::class, properties: [
'name' => 'partial',
'email' => 'exact',
])]
#[ApiFilter(OrderFilter::class, properties: ['id', 'name', 'createdAt'])]
#[ApiFilter(DateFilter::class, properties: ['createdAt', 'updatedAt'])]
#[ApiFilter(RangeFilter::class, properties: ['price', 'quantity'])]
#[ApiFilter(BooleanFilter::class, properties: ['active'])]
#[ApiFilter(ExistsFilter::class, properties: ['deletedAt'])]
Créer src/Filter/{FilterName}Filter.php :
<?php
declare(strict_types=1);
namespace {namespace}\Filter;
use ApiPlatform\Doctrine\Orm\Filter\AbstractFilter;
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use ApiPlatform\Metadata\Operation;
use Doctrine\ORM\QueryBuilder;
final class {FilterName}Filter extends AbstractFilter
{
protected function filterProperty(
string $property,
mixed $value,
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
?Operation $operation = null,
array $context = [],
): void {
if ('customProperty' !== $property) {
return;
}
$parameterName = $queryNameGenerator->generateParameterName($property);
$queryBuilder
->andWhere(sprintf('o.%s = :%s', $property, $parameterName))
->setParameter($parameterName, $value);
}
public function getDescription(string $resourceClass): array
{
return [
'customProperty' => [
'property' => 'customProperty',
'type' => 'string',
'required' => false,
'description' => 'Description du filtre personnalisé',
'openapi' => [
'description' => 'Description pour OpenAPI',
],
],
];
}
}
Filtres ajoutés à {ResourceName}
Filtres configurés :
- SearchFilter : name (partial), email (exact)
- OrderFilter : id, name, createdAt
- DateFilter : createdAt, updatedAt
Exemples de requêtes :
- GET /api/{resources}?name=foo (recherche partielle)
- GET /api/{resources}?order[name]=asc (tri)
- GET /api/{resources}?createdAt[after]=2024-01-01 (date)
Documentation automatique :
- Les filtres apparaissent dans OpenAPI/Swagger
- Les filtres sont documentés dans les réponses Hydra
Prochaines étapes :
- Tester les filtres : /api-platform:make-test {ResourceName}
- Ajouter des filtres personnalisés : /api-platform:make-filter {ResourceName}
| Filtre | Usage | Paramètres |
|---|---|---|
| SearchFilter | Recherche textuelle | exact, partial, start, end, word_start, ipartial |
| OrderFilter | Tri | ASC, DESC |
| DateFilter | Dates | before, after, strictly_before, strictly_after |
| RangeFilter | Intervalles numériques | between, gt, gte, lt, lte |
| BooleanFilter | Booléens | true, false, 1, 0 |
| ExistsFilter | Nullabilité | true, false |
| NumericFilter | Valeurs numériques exactes | valeur exacte |
#[QueryParameter]npx claudepluginhub atournayre/claude-personas --plugin api-platformAdds search, sort, date range, boolean, enum, numeric, IRI, and free-text filters to API Platform collections using the QueryParameter approach. Covers migration from legacy #[ApiFilter] code.
Implements API Platform filters including v4 Parameters API (QueryParameter) and legacy #[ApiFilter] for search, date, range, boolean, and custom filtering in Symfony projects.
Guides designing filter and sort query parameters for list endpoints, covering operator syntax, injection prevention, and sort conventions.