Un plugin Filament permettant d'exporter et d'importer des ressources Filament avec leurs fichiers associés entre projets Laravel.
Si le package n'est pas encore publié sur Packagist, ajoutez-le comme repository local dans le composer.json de votre projet Laravel :
{
"repositories": [
{
"type": "path",
"url": "f:/Ucello/packages/filament-export/plugin-resource-transfer"
}
]
}Ensuite, installez le package :
composer require uccello/plugin-resource-transfer:@devUne fois le package publié :
composer require uccello/plugin-resource-transferPubliez le fichier de configuration :
php artisan vendor:publish --tag="plugin-resource-transfer-config"Pour que les styles du package soient correctement appliqués, ajoutez la directive @source dans votre fichier resources/css/theme.css pour pointer vers le répertoire de vues du package :
@source '../../../../vendor/uccello/plugin-resource-transfer/resources/views';Dans le fichier config/plugin-resource-transfer.php, déclarez les fichiers associés à chaque ressource que vous souhaitez exporter.
Le fichier de configuration supporte deux structures :
Nouvelle structure (recommandée) avec support des commentaires et packages :
return [
'UserResource' => [
'files' => [
'app/Filament/Resources/UserResource.php',
'app/Filament/Resources/UserResource',
'app/Models/User.php',
],
'comment' => "1. Exécuter la migration : php artisan migrate, 2. Publier les assets si nécessaire : php artisan filament:assets, 3. Vérifier les permissions dans le modèle User",
'packages' => [
'composer' => ['spatie/laravel-permission:^6.0'],
'npm' => ['lodash', 'axios@^1.0'],
],
],
'ProductResource' => [
'files' => [
'app/Filament/Resources/ProductResource.php',
'app/Filament/Resources/ProductResource',
'app/Models/Product.php',
'database/migrations/create_products_table.php',
],
'comment' => "1. Exécuter la migration : php artisan migrate, 2. Configurer les relations dans les modèles associés, 3. Ajouter les permissions dans votre système d'authentification",
'packages' => [
'composer' => ['barryvdh/laravel-debugbar'],
'npm' => ['@heroicons/react'],
],
],
];Ancienne structure (toujours supportée pour compatibilité) :
return [
'UserResource' => [
'app/Filament/Resources/UserResource.php',
'app/Filament/Resources/UserResource',
'app/Models/User.php',
],
];-
files(requis) : Tableau des chemins de fichiers relatifs à la racine du projet à inclure dans l'export. Vous pouvez spécifier des fichiers individuels ou des répertoires entiers. -
comment(optionnel) : Instructions de configuration à suivre après l'importation de la ressource. Ces instructions seront affichées à l'utilisateur après l'importation réussie. -
packages(optionnel) : Dépendances Composer et npm requises par la ressource. Les packages seront proposés à l'installation après l'importation de la ressource.composer: Tableau des packages Composer à installer (format:vendor/packageouvendor/package:version)npm: Tableau des packages npm à installer (format:package-nameoupackage-name@version)
Exemple :
'packages' => [ 'composer' => ['spatie/laravel-permission:^6.0', 'intervention/image'], 'npm' => ['lodash', 'axios@^1.0', '@heroicons/react'], ],
- Les commentaires sont automatiquement inclus dans le manifest lors de l'export et affichés après l'importation.
- Les packages sont automatiquement inclus dans le manifest lors de l'export et proposés à l'installation après l'importation.
- Si vous n'avez pas besoin d'instructions de configuration, vous pouvez omettre la clé
comment. - Si vous n'avez pas besoin de packages, vous pouvez omettre la clé
packagesou ne spécifier que les types nécessaires (par exemple, seulementcomposerou seulementnpm). - Les chemins de fichiers peuvent être relatifs à
base_path()ou utiliser des chemins absolus. - Pour les packages Composer, vous pouvez spécifier une version avec la syntaxe Composer standard (ex:
vendor/package:^1.0,vendor/package:2.*). - Pour les packages npm, vous pouvez spécifier une version avec la syntaxe npm standard (ex:
package@^1.0,package@latest).
Dans votre AdminPanelProvider (ou autre panel provider), ajoutez le plugin au panel :
use Uccello\PluginResourceTransfer\PluginResourceTransferPlugin;
public function panel(Panel $panel): Panel
{
return $panel
// ...existing code...
->plugins([PluginResourceTransferPlugin::make()]);
}Note : Le plugin enregistre automatiquement la page ManageResourcesPage qui est un assistant complet avec sélection du mode (export/import). La page apparaît dans le menu "Mode Développeur" et est automatiquement quand le mode debug est false.
- Accédez à la page Gérer Resources ou Export Filament dans votre panel Filament
- Sélectionnez les ressources à exporter
- Prévisualisez les fichiers qui seront inclus
- Confirmez l'export pour télécharger un fichier ZIP bundle
Le ZIP contiendra tous les fichiers de chaque ressource sélectionnée avec un fichier manifest.php décrivant la structure.
- Accédez à la page Gérer Resources ou Import Filament dans votre panel Filament
- Uploadez le fichier ZIP exporté
- Les fichiers seront automatiquement copiés aux bons emplacements dans votre projet
- Le fichier de configuration sera mis à jour automatiquement avec la structure
files+comment+packages - Consultez les instructions de configuration affichées après l'importation pour chaque ressource
- Ajoutez les packages requis (si définis) :
- Si des packages Composer ou npm sont requis, une section "Packages requis" s'affichera pour chaque ressource
- Cliquez sur le bouton "Ajouter aux fichiers JSON" pour ajouter automatiquement les packages dans
composer.jsonetpackage.json - Les packages seront ajoutés dans les fichiers JSON sans les installer immédiatement
- Installez les packages :
- Executer npm install et composer install une fois les packages sont copiés
- Suivez les étapes indiquées dans les commentaires (migrations, permissions, etc.)
- Actualisez votre page pour voir les nouvelles ressources dans Filament
Notes importantes sur l'installation des packages :
- Les packages sont d'abord ajoutés dans
composer.jsonetpackage.jsonpour garantir la traçabilité - Les packages existants ne sont pas dupliqués lors de l'ajout
- Si des commentaires de configuration ont été définis lors de l'export, ils seront automatiquement affichés après l'importation pour vous guider dans la configuration de chaque ressource
The MIT License (MIT).