api-platformmake-filter
Génère des filtres API Platform (search, date, range, order, boolean, exists, custom)
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Génère des filtres API Platform (search, date, range, order, boolean, exists, custom)
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Audite un projet API Platform existant et produit un rapport de bonnes pratiques, performances et sécurité
Génère des DTOs (input/output) API Platform avec mapping vers les entités
Génère un State Processor API Platform pour personnaliser la persistence des données
Génère un State Provider API Platform pour personnaliser la récupération de données
Génère une API Resource complète avec attribut
Génère des tests fonctionnels API Platform (PHPUnit/ApiTestCase) pour une resource
| name | api-platform:make-filter |
| description | Génère des filtres API Platform (search, date, range, order, boolean, exists, custom) |
| argument-hint | <nom-resource> |
| model | sonnet |
| allowed-tools | ["AskUserQuestion","Bash","Read","Write","Edit","Grep","Glob"] |
| version | 1.0.0 |
| license | MIT |
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]