PHPackages                             appolodev/sf-toolbox - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. appolodev/sf-toolbox

ActiveLibrary[Framework](/categories/framework)

appolodev/sf-toolbox
====================

Toolbox for Symfony

5.1.0(3w ago)01.3k2MITPHPPHP &gt;=8.4

Since Nov 15Pushed 3w ago3 watchersCompare

[ Source](https://github.com/AppoloDev/sf-toolbox)[ Packagist](https://packagist.org/packages/appolodev/sf-toolbox)[ RSS](/packages/appolodev-sf-toolbox/feed)WikiDiscussions develop Synced 2w ago

READMEChangelog (10)Dependencies (64)Versions (92)Used By (2)

Symfony Toolbox
===============

[](#symfony-toolbox)

`appolodev/sf-toolbox` — une boîte à outils privée (namespace `AppoloDev\SFToolboxBundle`) fournissant des briques réutilisables pour les projets Symfony : traits d'entités Doctrine, une couche de requêtage fluide sur les repositories, des commandes Maker de scaffolding, quelques types de formulaire, des helpers de sécurité, et de petits utilitaires.

Installation
------------

[](#installation)

```
composer require appolodev/sf-toolbox
```

Variables d'environnement à définir dans le projet consommateur (requises par les globales Twig / le routeur par défaut de `SFToolboxExtension`) :

```
SITE_TITLE=
THEME_COLOR=
GOOGLE_MAP_API_KEY=
DEFAULT_URI=

```

Si vous utilisez `Message\EmailMessage` (voir plus bas), définissez aussi `SENDER_EMAIL` et `SENDER_NAME`.

Intégration Claude Code
-----------------------

[](#intégration-claude-code)

Ce repo embarque un [Skill Claude Code](https://docs.claude.com/en/docs/claude-code/skills) dans `.claude/skills/sf-toolbox/`, pour qu'un agent Claude travaillant dans un projet dépendant de ce bundle puisse consulter son API sans avoir à relire `vendor/appolodev/sf-toolbox` en entier à chaque fois.

Claude Code ne découvre automatiquement les Skills que dans le `.claude/skills/` propre à chaque projet, jamais dans `vendor/`. Pour rendre le Skill disponible dans un projet consommateur, il faut brancher une fois le script Composer fourni, dans le `composer.json` de ce projet :

```
{
    "scripts": {
        "post-install-cmd": [
            "AppoloDev\\SFToolboxBundle\\Composer\\ScriptHandler::installClaudeSkill"
        ],
        "post-update-cmd": [
            "AppoloDev\\SFToolboxBundle\\Composer\\ScriptHandler::installClaudeSkill"
        ]
    }
}
```

(Si le projet déclare déjà d'autres scripts sous ces clés — par exemple `@auto-scripts` de Symfony Flex — ajoutez cette entrée à la liste existante plutôt que de la remplacer.)

Lancez ensuite `composer install` (ou `update`) une fois. Cela crée `.claude/skills/sf-toolbox` à la racine du projet, sous forme de lien symbolique vers `vendor/appolodev/sf-toolbox/.claude/skills/sf-toolbox` (retombe sur une simple copie si les liens symboliques ne sont pas supportés, par exemple certaines configurations Windows). Comme il s'agit d'un lien résolu depuis `vendor/`, il reflète toujours exactement la version du bundle installée dans ce projet précis — ajoutez-le au `.gitignore` du projet :

```
/.claude/skills/sf-toolbox

```

Lorsque vous modifiez l'API publique de ce bundle, mettez à jour les fichiers du Skill sous `.claude/skills/sf-toolbox/` dans le même changement — c'est la source de vérité qui sera liée dans chaque projet consommateur.

Fonctionnalités
---------------

[](#fonctionnalités)

### Concerns d'entité Doctrine

[](#concerns-dentité-doctrine)

Les traits sous `AppoloDev\SFToolboxBundle\Domain\Entity\Concern\*` ajoutent à une entité des champs mappés Doctrine prêts à l'emploi, avec leurs accesseurs : `Identifiable` (clé primaire UUID), `Timestampable` (`createdAt`/`updatedAt`), `Sluggable`, `Publishable`, `Activable`, `Archivable`, `Blockable`, `Deletable`, `Authenticable` (forme de `UserInterface` Symfony), `Geolocalizable`. Chacun a une `*Interface` correspondante.

```
use AppoloDev\SFToolboxBundle\Domain\Entity\Concern\Identifiable\Identifiable;
use AppoloDev\SFToolboxBundle\Domain\Entity\Concern\Timestampable\Timestampable;

#[ORM\Entity(repositoryClass: BookRepository::class)]
#[ORM\HasLifecycleCallbacks]
class Book
{
    use Identifiable;
    use Timestampable;
}
```

📖 Détail complet, méthode par méthode : [docs/Domain/Entity/Concern/](docs/README.md#domain).

### Repository Criteria

[](#repository-criteria)

Les traits sous `AppoloDev\SFToolboxBundle\Domain\Repository\Criteria\*` se composent dans un `ServiceEntityRepository` pour lui donner une API de QueryBuilder fluide et chainable :

```
class BookRepository extends ServiceEntityRepository implements BuilderCriteriaInterface
{
    use BuilderCriteria, WhereCriteria, JoinCriteria, SelectCriteria, GroupAndOrderCriteria;

    protected static string $alias = 'book';

    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Book::class);
    }
}

$repository->getQB()->eq('published', true)->order('updatedAt', 'DESC')->getResults();
```

Également disponibles (traits optionnels) : `DateCriteria`, `PublishableCriteria`, `GeolocalizableCriteria`.

📖 Détail complet : [docs/Domain/Repository/Criteria/](docs/README.md#domain), à commencer par [BuilderCriteria](docs/Domain/Repository/Criteria/BuilderCriteria.md).

### Commandes Maker

[](#commandes-maker)

- `bin/console make:domain:entity  ` — génère une entité + son repository sous `src/Domain//`.
- `bin/console make:scaffold     ` — génère un CRUD complet (contrôleurs, type de formulaire, voter, templates Twig) sous `src/Http//`.

📖 Détail complet : [docs/Maker/](docs/README.md#maker).

### Types de formulaire

[](#types-de-formulaire)

`TomSelectType`, `EntityTomSelectType` (widgets de sélection enrichis en JS), `CardRadioType` (choix/radio thémé en cartes), `GeolocalizableType` (champ caché + payload JS de géocomplétion, mappé automatiquement sur les champs de l'entité via `GeolocalizableSubscriber`, validé via `GeolocalizableConstraint`).

📖 Détail complet : [docs/Form/](docs/README.md#form).

### Sécurité

[](#sécurité)

`AbstractVoter` (helpers de vérification de rôle `canAllow()`/`canAllowAdmin()`) et `#[IsNotGranted]` (inverse de `#[IsGranted]` natif — refuse l'accès quand la vérification *réussit*).

📖 Détail complet : [docs/Security/](docs/README.md#security).

### Divers

[](#divers)

`CsvWriter` + `CsvFileResponse` pour l'export CSV, `ZipResponse` pour le téléchargement de fichiers zippés, `Message\EmailMessage` + son handler Messenger pour l'envoi asynchrone d'emails templatés, le filtre Twig `localizedDate` de `Twig\Extension\IntlExtension`, et les classes utilitaires statiques `ArrayUtils`, `GeocompleteUtils`, `UuidUtils`.

```
{{ date|localizedDate('d LLLL', 'fr') }}
```

📖 Détail complet : [docs/Csv/](docs/README.md#csv--r%C3%A9ponses-http), [docs/Response/](docs/README.md#csv--r%C3%A9ponses-http), [docs/Message/](docs/README.md#email-twig-utilitaires), [docs/Twig/](docs/README.md#email-twig-utilitaires), [docs/Utils/](docs/README.md#email-twig-utilitaires).

Documentation
-------------

[](#documentation)

- [`docs/`](docs/README.md) — documentation exhaustive et en français : chaque classe a sa fiche, avec description de chaque méthode et exemples d'usage.
- `.claude/skills/sf-toolbox/` — résumé plus court, en anglais, pensé pour être chargé rapidement en contexte par un agent Claude Code (voir la section [Intégration Claude Code](#int%C3%A9gration-claude-code) ci-dessus).

###  Health Score

57

—

FairBetter than 98% of packages

Maintenance96

Actively maintained with recent releases

Popularity17

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity84

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 81.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~19 days

Recently: every ~39 days

Total

90

Last Release

24d ago

Major Versions

1.1.13 → v2.0.02023-07-24

2.0.33 → 3.0.02024-08-08

3.4.7 → 4.0.02025-12-08

4.0.1 → 5.0.02026-02-19

1.2.0 → 5.1.02026-07-27

PHP version history (3 changes)1.0.0PHP &gt;=8.0

v2.0.0PHP &gt;=8.2

5.0.1PHP &gt;=8.4

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/4354248?v=4)[Frédéric](/maintainers/Fredxd)[@Fredxd](https://github.com/Fredxd)

---

Top Contributors

[![Fredxd](https://avatars.githubusercontent.com/u/4354248?v=4)](https://github.com/Fredxd "Fredxd (167 commits)")[![crosf32](https://avatars.githubusercontent.com/u/17517704?v=4)](https://github.com/crosf32 "crosf32 (26 commits)")[![simonmnt](https://avatars.githubusercontent.com/u/1232756?v=4)](https://github.com/simonmnt "simonmnt (12 commits)")

###  Code Quality

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/appolodev-sf-toolbox/health.svg)

```
[![Health](https://phpackages.com/badges/appolodev-sf-toolbox/health.svg)](https://phpackages.com/packages/appolodev-sf-toolbox)
```

###  Alternatives

[pimcore/pimcore

Content &amp; Product Management Framework (CMS/PIM/E-Commerce)

3.8k3.9M535](/packages/pimcore-pimcore)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k6.0M779](/packages/sylius-sylius)[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k18.3M430](/packages/easycorp-easyadmin-bundle)[chameleon-system/chameleon-base

The Chameleon System core.

1029.4k6](/packages/chameleon-system-chameleon-base)[open-dxp/opendxp

Content &amp; Product Management Framework (CMS/PIM)

9626.1k68](/packages/open-dxp-opendxp)[contao/core-bundle

Contao Open Source CMS

1301.7M3.1k](/packages/contao-core-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
