Download the PHP package sociolink/api-resource-bundle without Composer

On this page you can find all versions of the php package sociolink/api-resource-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package api-resource-bundle

SocioLink\ApiResourceBundle

Packagist

Génère les ressources API Platform (DTOs, State Processors/Providers, paramètres de filtrage #[QueryParameter]) à partir des entités Doctrine, via une commande CLI interactive.

Outil de développement. Le code qu'il génère ne référence jamais le bundle — il ne dépend que d'API Platform, de Symfony et de Doctrine — et fonctionne donc en production sans lui.

Licence. Ce dépôt est public afin d'être distribué via Packagist, mais il n'est pas open source : aucun droit d'utilisation, de modification ou de redistribution n'est accordé en dehors des projets explicitement autorisés par l'auteur. Voir LICENSE.

Prérequis

Minimum
PHP 8.5
Symfony 7.4 (compatible 7.4, 8.0, 8.1 et suivants)
API Platform 5.0, composants metadata, state, doctrine-orm et validator
Doctrine ORM 3.5, DBAL 4.0

Le bundle dépend des composants d'API Platform, jamais du paquet monolithique api-platform/core. Il s'installe donc sans rien retirer, que le projet utilise les composants (api-platform/symfony, installation actuelle) ou api-platform/core (qui remplace ces composants). Les tests générés par --with-tests utilisent en plus api-platform/test (ApiPlatform\Test\ApiTestCase) :

Le bundle reconnaît sans configuration le type Doctrine phone_number d'odolbeau/phone-number-bundle (^4.2, voir Types Doctrine personnalisés). Ce bundle n'est pas une dépendance obligatoire : seuls les projets qui stockent des numéros de téléphone l'installent, en require, car leurs entités en dépendent aussi en production.

Installation

Versions

Le bundle suit le versionnage sémantique ; chaque version est un tag Git vX.Y.Z, publié sur Packagist, et décrite dans le CHANGELOG. Préférez la contrainte ^1.0 à dev-main : composer update n'apporte alors que des versions publiées et compatibles.

Le contrat public, dont toute rupture impose une version majeure, comprend : le nom et les options de la commande, les clés de configuration sociolink_api_resource.*, et la forme du code généré (noms et emplacements des fichiers, shortName et URIs des ressources). Les classes internes (@internal) n'en font pas partie.

Avec Symfony Flex

Dans un projet utilisant Symfony Flex (tout projet créé avec symfony new ou symfony/skeleton), le bundle est enregistré automatiquement. Le paquet étant installé avec --dev, Flex le réserve aux environnements dev et test.

Par défaut, Flex applique une recette auto-générée, qui enregistre le bundle sans créer de fichier de configuration (toutes les clés sont optionnelles, voir Configuration) :

Le dépôt publie aussi sa propre recette (dossier flex/, compilé depuis recipe/), qui crée en plus config/packages/sociolink_api_resource.yaml, toutes les clés en commentaire avec leur valeur par défaut. Pour l'utiliser, déclarez ce dépôt de recettes dans le composer.json du projet, avant d'installer le bundle :

flex://defaults conserve les recettes officielles de Symfony pour les autres paquets. Composer affiche alors From github.com/SocioLink/ApiResourceBundle:main.

Sans Flex

Ajoutez le bundle à la main dans config/bundles.php :

Utilisation

Sans argument :

Menu interactif

Les entités sont regroupées par namespace (ordre alphabétique), numérotées en continu, choix unique ; « All » (dernier numéro) traite toutes les entités existantes.

Options

Destructrices

Option Effet
--force / -f Écrase les fichiers existants et réinjecte #[ApiResource].
--reinit / -r Avec --force : supprime les dossiers DTO/<Entité> et State/<Entité> des seules entités traitées (confirmation demandée dans un terminal), et retire de ces entités les sous-ressources dont la relation (toProperty) n'existe plus.

Mutuellement exclusives (une seule à la fois)

Option Effet
--only-resource / -o Injecte #[ApiResource] + filtres uniquement, aucun artefact.
--with-provider / -w Mode par défaut + Provider pour GET {id}, câblé sur Get.
--toggle-boolean / -t Un ToggleDto/ToggleProcessor unique pour tous les booléens.
--detach-boolean / -d Un DTO + Processor PATCH individuel par booléen.
--all / -a #[ApiResource] libre + tous les artefacts générés mais non liés.

Indépendantes

Option Effet
--dry-run Simule sans écrire aucun fichier — entités comprises.
--preview Affiche le code généré dans la console (implique --dry-run).
--with-tests Génère des tests fonctionnels ApiTestCase (paquet api-platform/test).
--sub-resources Sous-ressources pour les relations OneToMany (shortName propre {Parent}{Enfant}, placées après la ressource principale).
--graphql-filters Conservée pour compatibilité : les paramètres déclarés sur #[ApiResource] s'appliquent déjà nativement à GraphQL.
--with-mercure Injecte la directive mercure (privée par défaut : mercure: ['private' => true]).
--public Avec --with-mercure : mercure: true (mises à jour publiées publiquement) au lieu de privées. Refusé sans --with-mercure.

Sans --with-mercure, aucune directive mercure n'est injectée.

La commande se termine en échec (code 1) si une entité n'a pas pu être traitée ; les autres entités sont tout de même générées.

Artefacts générés

Artefact Opération
<Entité>CreateDto + Processor POST — contraintes #[Assert\*] de l'entité recopiées
<Entité>UpdateDto + Processor PATCH partiel — null = champ non envoyé (NotBlank accepte null)
<Entité>ToggleDto + Processor PATCH /{id}/toggle (--toggle-boolean)
<Entité><Champ>Dto + Processor PATCH /{id}/toggle-<champ> (--detach-boolean)
<Entité>Upload<Champ>Dto + Processor PATCH /{id}/<champ> multipart, pour chaque #[Vich\UploadableField]
<Entité>Provider GET /{id} avec chargement des relations ToOne (--with-provider)

Filtres générés

Les filtres sont déclarés en tant que paramètres parameters: [ ... ] directement sur l'attribut #[ApiResource] (#[ApiFilter], déprécié depuis API Platform 4.4, n'est jamais généré). Grâce à ce positionnement sur la ressource, API Platform cascade automatiquement ces filtres à la fois sur les routes de collection REST (GetCollection) et sur les collections GraphQL (QueryCollection) :

Champ Doctrine Filtre généré Requête
string, ascii_string PartialSearchFilter (sous-chaîne, sans casse) ?name=chai → %chai%
énumération, type personnalisé ExactFilter ?status=draft
uuid / guid (hors id) UuidFilter ?reference=<uuid>
boolean ExactFilter (schéma booléen) ?active=true
integer, float, decimal ChainFilter (ExactFilter + ComparisonFilter) ?price=25 · ?price[gte]=10
date / heure DateFilter ?createdAt[after]=2026-01-01
relation ToOne IriFilter ?author=/api/authors/{uuid}
relation ToMany, champ nullable ExistsFilter ?exists[deletedAt]=true
tri SortFilter ?order[name]=asc

Exclus de tout filtre : id, text, json, array, simple_array, blob, binary, dateinterval, ainsi que les champs listés dans filters.excluded_fields.

Une chaîne est recherchée par sous-chaîne (LOWER(champ) LIKE LOWER('%valeur%'), avec % et _ échappés). Une énumération (colonne string avec enumType) reste en égalité stricte, car ses valeurs sont fermées. Un type personnalisé (phone_number…) aussi, car sa valeur en base est une conversion de l'objet PHP. Sur une grande table, une recherche LIKE '%…%' ne peut pas utiliser d'index B-tree : excluez au besoin le champ (filters.excluded_fields).

Configuration

Toutes les clés sont optionnelles ; les valeurs par défaut conviennent à une application Symfony standard (App\ dans src/). Fichier config/packages/dev/sociolink_api_resource.yaml :

Pour surcharger un gabarit, copiez-le depuis templates/ du bundle dans templates_directory : les gabarits absents du dossier de surcharge restent ceux du bundle.

Types Doctrine personnalisés

Un type Doctrine standard est converti vers son type PHP (string, int, DateTimeImmutable, Uuid…). Un type inconnu est traité comme une chaîne, et la commande le signale par un avertissement. Or si Doctrine hydrate ce type en objet, un DTO typé string fait échouer le setter de l'entité (TypeError) : déclarez alors la classe hydratée dans custom_types, et le DTO sera typé et importé en conséquence.

phone_number (odolbeau/phone-number-bundle) est prédéfini : les DTOs typent le champ en libphonenumber\PhoneNumber. Le normaliseur de ce bundle (activé dès que le Serializer de Symfony est installé) convertit la chaîne JSON reçue ("+33612345678") en objet, puis le numéro est ressérialisé au format E.164. Les tests générés utilisent +33612345678 comme valeur d'exemple. Une entrée de custom_types peut redéfinir un type prédéfini.

Pour un autre type objet, le projet doit fournir un dénormaliseur (chaîne JSON → objet), faute de quoi API Platform rejette la requête.

Structure des fichiers générés

Qualité

La suite comprend un test de bout en bout (tests/Functional) : le bundle est enregistré dans un noyau Symfony avec un EntityManager Doctrine réel, la commande est exécutée dans chaque mode, puis chaque classe générée est chargée et chaque #[ApiResource] injecté est instancié avec API Platform. SOCIOLINK_E2E_KEEP=1 composer test conserve le projet généré pour inspection.

Les tests de tests/Recipe vérifient aussi que le fichier de configuration de la recette Flex reprend exactement les valeurs par défaut, et que flex/ correspond à la recompilation de recipe/ (php recipe/build.php).

CI GitHub Actions (.github/workflows/ci.yml) : PHP 8.5 × Symfony 7.4/8.0/8.1 avec les dépendances les plus récentes, plus une tâche avec les versions minimales de composer.json (--prefer-lowest).

Portage depuis la commande de projet

Ce bundle remplace la commande generate:resource qui vivait auparavant dans un projet applicatif (App\Command\GenerateResource). Changements de comportement à connaître lors du portage :

Depuis une version antérieure du bundle (BlackSheep\Symfony\ApiResourceBundle)

Licence

Ce projet est distribué sous licence propriétaire (voir LICENSE). Le dépôt est public afin de permettre sa distribution via Packagist, mais aucun droit d'utilisation, de modification ou de redistribution n'est accordé en dehors des projets explicitement autorisés par l'auteur.

Auteur

Xavier Kongolo


All versions of api-resource-bundle with dependencies

PHP Build Version
Package Version
Requires php Version >=8.5
ext-tokenizer Version *
api-platform/doctrine-orm Version ^5.0
api-platform/metadata Version ^5.0
api-platform/state Version ^5.0
api-platform/validator Version ^5.0
doctrine/dbal Version ^4.0
doctrine/inflector Version ^2.0
doctrine/orm Version ^3.5
nikic/php-parser Version ^5.6
symfony/config Version ^7.4 || ^8.0
symfony/console Version ^7.4 || ^8.0
symfony/dependency-injection Version ^7.4 || ^8.0
symfony/filesystem Version ^7.4 || ^8.0
symfony/http-kernel Version ^7.4 || ^8.0
twig/twig Version ^3.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package sociolink/api-resource-bundle contains the following files

Loading the files please wait ...