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]