PHPackages                             meniloss/symfony-skeleton-shbyjm - 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. meniloss/symfony-skeleton-shbyjm

ActiveProject[Framework](/categories/framework)

meniloss/symfony-skeleton-shbyjm
================================

Skeleton SHbyJM — base Symfony minimaliste pour tout nouveau site client, avec endpoint Flex SHbyJM pre-configure

v1.6.2(2w ago)033proprietaryPowerShellPHP &gt;=8.2

Since May 14Pushed 2w agoCompare

[ Source](https://github.com/meniloss/symfony-skeleton-shbyjm)[ Packagist](https://packagist.org/packages/meniloss/symfony-skeleton-shbyjm)[ RSS](/packages/meniloss-symfony-skeleton-shbyjm/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (1)Versions (16)Used By (0)

Symfony Skeleton SHbyJM
=======================

[](#symfony-skeleton-shbyjm)

Base Symfony minimaliste avec l'endpoint Flex SHbyJM pré-configuré. Aucun module SHbyJM n'est inclus par défaut — chaque package s'ajoute à la demande via `composer require`.

Prérequis
---------

[](#prérequis)

### PHP

[](#php)

- PHP &gt;= 8.2 avec les extensions `ctype` et `iconv`
- Composer 2.x

### Authentification GitHub (repos privés)

[](#authentification-github-repos-privés)

Les packages SHbyJM (`shbyjm/admin-shell`, `shbyjm/lead-forwarding`, `shbyjm/lead-management`, `shbyjm/cookie-consent`, `shbyjm/conversion-tracking`) sont hébergés dans des repos privés `meniloss/*`. Composer doit disposer d'un token GitHub ayant accès à ces repos.

Configurer le fichier `auth.json` de Composer (global) :

```
composer config --global github-oauth.github.com ghp_VOTRE_TOKEN_GITHUB
```

Le token doit avoir le scope `repo` pour accéder aux dépôts privés de l'organisation `meniloss`.

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

[](#installation)

```
composer create-project meniloss/symfony-skeleton-shbyjm mon-nouveau-site
```

Cela crée un projet Symfony 7.4 vierge avec :

- L'endpoint Flex SHbyJM déjà configuré
- Les repositories VCS GitHub déclarés pour les packages SHbyJM privés
- La config Messenger SHbyJM (deux bus, middleware doctrine\_transaction + DispatchDomainEventsAfterCommit, transport async Doctrine)
- La locale `fr` et le timezone `Europe/Brussels` par défaut
- Le Shared Kernel initial (Clock Port, EmailAddress, RecordsDomainEvents)

Structure dual avec bootstrap.ps1
---------------------------------

[](#structure-dual-avec-bootstrapps1)

Après la création du projet, le script `bootstrap.ps1` réorganise la structure en séparant le code Symfony du webroot. C'est la structure attendue pour un déploiement sur PlanetHoster (ou tout hébergement où le webroot est un dossier distinct).

### Utilisation typique

[](#utilisation-typique)

```
composer create-project meniloss/symfony-skeleton-shbyjm mon-nouveau-site
cd mon-nouveau-site
.\bootstrap.ps1
cd symfony
composer require shbyjm/admin-shell
```

### Paramètres

[](#paramètres)

ParamètreDéfautDescription`-SymfonyDir``symfony`Nom du dossier contenant le code`-PublicDir``public_html`Nom du dossier webrootLes noms peuvent contenir des points et des tirets (utile pour les sous-domaines PlanetHoster) :

```
.\bootstrap.ps1 -SymfonyDir "symfony" -PublicDir "blog.example.com.public_html"
```

### Structure résultante

[](#structure-résultante)

```
mon-nouveau-site/
├── symfony/              # Code Symfony (src/, config/, vendor/, bin/...)
├── public_html/          # Webroot (index.php, .htaccess, assets...)
├── claude.md             # Conventions projet
└── .git/

```

Le script ajuste automatiquement :

- `composer.json` → `extra.symfony.public-dir` pointe vers le webroot
- `composer.json` → retrait de `assets:install %PUBLIC_DIR%` des auto-scripts (inutile avec Webpack Encore, incompatible avec la structure dual)
- `index.php` → le `require` de l'autoloader pointe vers `symfony/vendor/`

> **Note** : `assets:install` est retiré par convention SHbyJM. La stack utilise Webpack Encore pour la gestion des assets. Si un cas spécifique le nécessite, la commande reste disponible manuellement : `php bin/console assets:install`.

Apache (.htaccess)
------------------

[](#apache-htaccess)

Le skeleton tire `symfony/apache-pack` via flex-require. La recipe officielle pose automatiquement un `.htaccess` dans `public/` au `create-project`. Apres `bootstrap.ps1`, ce fichier se retrouve dans `public_html/.htaccess` — pret pour un deploiement Apache (PlanetHoster N0C).

CSRF
----

[](#csrf)

Le skeleton livre `config/packages/csrf.yaml` qui desactive le CSRF stateless (double-submit cookie) introduit par la recipe Symfony 7.4. Tous les sites SHbyJM utilisent `form_login` via admin-shell, qui necessite le CSRF classique base session. Sans cette preemption, le login echoue avec "Jeton CSRF invalide".

Repositories VCS
----------------

[](#repositories-vcs)

Le `composer.json` déclare les repositories VCS GitHub des packages SHbyJM :

```
"repositories": [
    { "type": "vcs", "url": "https://github.com/meniloss/admin-shell" },
    { "type": "vcs", "url": "https://github.com/meniloss/lead-forwarding" },
    { "type": "vcs", "url": "https://github.com/meniloss/lead-management" },
    { "type": "vcs", "url": "https://github.com/meniloss/cookie-consent" },
    { "type": "vcs", "url": "https://github.com/meniloss/conversion-tracking" }
]
```

Ces déclarations indiquent à Composer où trouver les packages privés. Aucun package n'est installé automatiquement — ils restent à ajouter à la demande via `composer require`.

Config Messenger (livrée d'office)
----------------------------------

[](#config-messenger-livrée-doffice)

Le skeleton inclut `config/packages/messenger.yaml` avec la convention Messenger partagée par tous les sites SHbyJM :

- **`command.bus`** (synchrone) — middlewares `doctrine_transaction` + `DispatchDomainEventsAfterCommitMiddleware`, bus par défaut
- **`async.bus`** — taches lourdes (emails, notifications differees)
- **Transport `async`** — Doctrine, retry x3
- **Transport `failed`** — dead-letter queue Doctrine

Cette config est une convention structurante documentee dans le `claude.md`. Tous les packages SHbyJM (`admin-shell`, `lead-forwarding`, `lead-management`, `cookie-consent`, `conversion-tracking`) en dependent. Elle est livree dans le skeleton plutot que via une recipe Flex car Flex refuse d'ecraser un fichier existant en mode non-interactif — la recipe officielle `symfony/messenger` pose un `messenger.yaml` par defaut avant que la recipe SHbyJM ne puisse agir.

La variable `MESSENGER_TRANSPORT_DSN` est definie dans le `.env` du skeleton.

Locale et timezone
------------------

[](#locale-et-timezone)

Le skeleton livre `config/packages/framework.yaml` et `config/packages/translation.yaml` avec :

- `default_locale: 'fr'` (convention SHbyJM — tous les sites sont francophones)
- `fallbacks: ['fr']` pour les traductions

Ces fichiers preemptent les recipes Flex officielles (meme mecanisme que `messenger.yaml`).

Shared Kernel
-------------

[](#shared-kernel)

Le skeleton livre un `src/Shared/` initial avec les classes transversales utilisees par tous les sites SHbyJM :

```
src/Shared/
+-- Application/Port/Clock/Clock.php            # Interface Clock (regle absolue #5)
+-- Domain/Event/RecordsDomainEvents.php         # Trait pour les aggregats
+-- Domain/ValueObject/EmailAddress.php          # VO immuable avec validation
+-- Infrastructure/Clock/SystemClock.php         # Implementation prod (symfony/clock)
+-- Infrastructure/Clock/FrozenClock.php         # Implementation test (temps fige)
+-- Infrastructure/Messenger/
    +-- DispatchDomainEventsAfterCommitMiddleware.php  # Dispatch events apres commit

```

Ces classes suivent les conventions documentees dans le `claude.md` (Clock Port obligatoire, Value Objects immuables, handlers retournant `[result, events]`).

Ajout des modules SHbyJM
------------------------

[](#ajout-des-modules-shbyjm)

Les recipes SHbyJM s'appliquent automatiquement grâce à l'endpoint Flex configuré dans ce skeleton. Il suffit de `require` les packages souhaités :

```
# Back-office
composer require shbyjm/admin-shell

# Transfert de leads
composer require shbyjm/lead-forwarding
```

> **Cinq packages SHbyJM disponibles** (exemples ci-dessus parmi cette liste) : `shbyjm/admin-shell` (back-office), `shbyjm/lead-forwarding` (outbox vers le Hub), `shbyjm/lead-management` (CRM léger), `shbyjm/cookie-consent` (bandeau RGPD), `shbyjm/conversion-tracking` (Meta Pixel / CAPI / GA4).

Chaque `composer require` déclenche la recipe associée, qui met en place la configuration, les routes, les templates, etc.

Ajout de packages Symfony standards
-----------------------------------

[](#ajout-de-packages-symfony-standards)

Ce skeleton est volontairement minimal. Les packages courants (Doctrine, Twig, Mailer, Security, etc.) s'ajoutent de la même manière :

```
composer require doctrine/orm
composer require twig
composer require symfony/mailer
```

Endpoint Flex
-------------

[](#endpoint-flex)

Ce skeleton configure deux endpoints Flex (dans `composer.json > extra.symfony.endpoint`) :

1. **`https://api.github.com/repos/meniloss/recipes/contents/index.json`** — recipes SHbyJM (admin-shell, lead-forwarding, lead-management, cookie-consent, conversion-tracking)
2. **`flex://defaults`** — recipes officielles Symfony

L'ordre est important : les recipes SHbyJM sont consultées en priorité.

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance96

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

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 ~0 days

Total

15

Last Release

20d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0e487e20c1421f98c76cc0ec79bac8f4fcb7547777ed697607dc6294b8e5f676?d=identicon)[meniloss](/maintainers/meniloss)

### Embed Badge

![Health badge](/badges/meniloss-symfony-skeleton-shbyjm/health.svg)

```
[![Health](https://phpackages.com/badges/meniloss-symfony-skeleton-shbyjm/health.svg)](https://phpackages.com/packages/meniloss-symfony-skeleton-shbyjm)
```

###  Alternatives

[symfony/skeleton

A minimal Symfony project recommended to create bare bones applications

6204.6M2](/packages/symfony-skeleton)[symfony/symfony-demo

Symfony Demo Application

2.6k249.0k](/packages/symfony-symfony-demo)[oro/platform

Business Application Platform (BAP)

641140.7k103](/packages/oro-platform)[shopware/production

177202.8k](/packages/shopware-production)[sulu/skeleton

Project template for starting your new project based on the Sulu content management system

29734.8k](/packages/sulu-skeleton)[sylius/sylius-standard

Starting point for projects powered by Sylius eCommerce.

274293.5k](/packages/sylius-sylius-standard)

PHPackages © 2026

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