Download the PHP package tailsfadmin/tailsfadmin-bundle without Composer
On this page you can find all versions of the php package tailsfadmin/tailsfadmin-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download tailsfadmin/tailsfadmin-bundle
More information about tailsfadmin/tailsfadmin-bundle
Files in tailsfadmin/tailsfadmin-bundle
Package tailsfadmin-bundle
Short Description Thème admin Symfony basé sur TailAdmin — bundle réutilisable (Symfony UX, Stimulus, AssetMapper)
License MIT
Homepage https://github.com/thibmonier/tailsfadmin
Informations about the package tailsfadmin-bundle
tailsfadmin
Thème admin Symfony basé sur TailAdmin — bundle réutilisable (Symfony UX, Stimulus, AssetMapper, Tailwind CSS v4).
Architecture du monorepo
Ce dépôt suit la structure définie dans ADR-002 :
Règle d'isolation bundle / démo (DoD §6)
IMPORTANT : aucun code réutilisable ne doit vivre dans
demo/. La démo ne contient que de l'usage du bundle. Toute logique partageable appartient àsrc/.
Prérequis
- PHP >= 8.5
- Composer >= 2.0
- Symfony >= 7.3 || 8.x
Installation (développement — path repository)
Installation depuis Packagist (projet tiers)
Le bundle est activé automatiquement par Symfony Flex.
Configuration & prise en main
1. Assets (AssetMapper + importmap)
Les contrôleurs Stimulus du bundle vivent sous bundles/tailsfadmin. Stimulus
doit être démarré côté hôte (assets/bootstrap.js du skeleton). Déclarez le path
AssetMapper des contrôleurs dans votre config/packages/asset_mapper.yaml (le
prepend() du bundle ne survit pas au merge Flex ; la recette Flex — à venir —
l'automatisera) :
Dépendances JS tierces — commande d'installation. Cinq contrôleurs du bundle
s'appuient sur des bibliothèques tierces (ApexCharts, jsvectormap, flatpickr,
Dropzone, FullCalendar). Un bundle ne peut pas injecter d'entrées dans
l'importmap.php de l'hôte (l'importmap n'est pas une config mergeable — voir
ADR-007). Le bundle fournit
donc une commande qui ajoute ces pins et vendore les fichiers localement :
- Sans CDN au runtime : les libs sont téléchargées à l'installation puis
servies en local (ADR-004/006). La source de vérité des versions pinées est
config/importmap-entries.php, distribué avec le bundle. - Idempotente : relançable sans risque, n'ajoute que ce qui manque.
- Conflits de version : si votre app a déjà piné une lib dans une autre
version, la commande ne l'écrase pas ; elle signale le conflit. Forcez la
réécriture avec
--force. - Garde-fou : si une page utilise un composant dont la lib n'est pas installée, une erreur explicite en console rappelle la commande à lancer (au lieu du cryptique « Failed to resolve module specifier »).
Compilez ensuite les assets :
Les contrôleurs sans dépendance externe (
theme,sidebar,modal,dropdown,alert-dismiss,preloader,search,submenu) fonctionnent sans cette commande, via le seul path AssetMapper.
2. Thème CSS (Tailwind hôte)
Le bundle distribue son thème (tokens @theme, dark mode, classes composants
.menu-item*…) dans assets/styles/theme.css. Votre app le branche en
une seule ligne, dans sa propre entrée Tailwind v4 — sans recopier les
tokens ni le CSS des composants :
- Standalone, sans Node : compilez avec le binaire
symfonycasts/tailwind-bundle(php bin/console tailwind:build), comme le reste de votre CSS. - Scan du contenu du bundle :
theme.cssdéclare des@source(relatifs, donc portables depuisvendor/) vers les templates et contrôleurs du bundle, afin que les utilitaires qu'ils emploient soient bien générés chez vous. - Dark mode : stratégie par classe — activez
.darksur<html>. L'échelle de gris n'est pas inversée (les composants portent des variantesdark:explicites). - Rebranding : redéfinissez les tokens
--color-brand-*après l'import (la cascade:rootl'emporte sur@theme) — cela repeint boutons, liens et item de menu actif :
Besoin d'une entrée « tout-en-un » (Tailwind + thème) ? Importez plutôt
assets/styles/app.cssdu bundle. La démo (demo/assets/styles/app.css) illustre le pattern hôte ci-dessus.
3. Menu de la sidebar (config/packages/tailsfadmin.yaml)
Les label sont des clés de traduction (voir i18n ci-dessous) ou des libellés bruts :
Filtrage par permission (optionnel). Chaque item (et sous-item) accepte une clé
permission. Si un composant de sécurité Symfony est installé, les items dont
l'utilisateur courant n'a pas l'autorisation sont masqués (is_granted), et un
groupe entièrement filtré n'est pas rendu. Sans sécurité, tout reste visible.
Le MenuBuilder reçoit @?security.authorization_checker (injection optionnelle,
aucune dépendance dure). Pour l'activer, installez symfony/security-bundle.
4. Layout d'une page
Le layout attend une route nommée
home(logo de la sidebar) etlocale_switchsi vous utilisez le sélecteur de langue.
Personnaliser le header. Le composant tsf:Layout:Header expose des blocs
surchargeables — language, notifications, user_menu — pour brancher un vrai
menu utilisateur (déconnexion + CSRF), un flux de notifications réel, ou retirer le
sélecteur de langue si l'application ne définit pas de route locale_switch.
Surchargez {% block header %} du layout avec le composant et vos slots :
5. Internationalisation (optionnel)
Installez symfony/translation, réglez framework.default_locale + enabled_locales,
et fournissez vos catalogues. Le bundle expose ses propres traductions du chrome
(header, breadcrumb…) et les helpers Twig tsf_dir() / tsf_locales().
6. Catalogue des composants
Tous les composants <twig:tsf:… /> (props, slots, exemples) sont documentés
dans docs/components.md ; une galerie vivante est
servie sur /ui-kit dans la démo.
Commandes de développement
Le versionnement suit SemVer ; les évolutions sont consignées dans CHANGELOG.md (format Keep a Changelog).
Vérifications DoD
Docker / FrankenPHP
La démo peut aussi être lancée via Docker Compose, sous FrankenPHP / PHP 8.5,
pour garantir un environnement reproductible (local = CI). Voir
demo/Dockerfile et compose.yaml pour le détail de l'image.
Démarrer / arrêter
L'application est ensuite disponible sur http://localhost/.
Vérifier le conteneur
Changer le port hôte (erreur « port déjà utilisé »)
Si le port 80 (ou 443) est déjà occupé sur la machine hôte, définir
HOST_HTTP_PORT / HOST_HTTPS_PORT avant de lancer la commande :
Ces variables peuvent aussi être placées dans un fichier .env à la racine
du dépôt (non versionné) pour éviter de les répéter à chaque commande.
Utilisation hors-ligne (pré-pull de l'image)
L'image de base dunglas/frankenphp:php8.5 peut être téléchargée à l'avance,
par exemple avant un déplacement sans accès réseau ou pour accélérer un
premier build :
Le docker compose up --build suivant réutilisera l'image déjà présente en
cache local pour l'étape FROM, sans nouveau téléchargement.
Stack technique
| Couche | Technologie |
|---|---|
| Backend | PHP 8.5, Symfony 8.1, AbstractBundle |
| Frontend | Stimulus / Symfony UX, AssetMapper |
| CSS | Tailwind CSS v4 |
| Tests | PHPUnit 12, WebTestCase |
| Qualité | PHPStan max, PHP CS Fixer (PSR-12) |
Licence
MIT — voir LICENSE
All versions of tailsfadmin-bundle with dependencies
symfony/asset Version ^7.3 || ^8.0
symfony/asset-mapper Version ^7.3 || ^8.0
symfony/console Version ^7.3 || ^8.0
symfony/form Version ^7.3 || ^8.0
symfony/framework-bundle Version ^7.3 || ^8.0
symfony/stimulus-bundle Version ^2.20 || ^3.0
symfony/translation Version ^7.3 || ^8.0
symfony/ux-twig-component Version ^2.0 || ^3.0