PHPackages                             bnine/filesbundle - 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. [File &amp; Storage](/categories/file-storage)
4. /
5. bnine/filesbundle

ActiveSymfony-bundle[File &amp; Storage](/categories/file-storage)

bnine/filesbundle
=================

Symfony bundle for entity-based file browser and management.

v1.3.4(2w ago)0229MITTwigPHP ^8.1

Since Aug 2Pushed 2w agoCompare

[ Source](https://github.com/afornerot/bNine-FilesBundle)[ Packagist](https://packagist.org/packages/bnine/filesbundle)[ RSS](/packages/bnine-filesbundle/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (23)Versions (15)Used By (0)

bNine-FilesBundle
=================

[](#bnine-filesbundle)

Bundle Symfony pour la gestion de fichiers : upload, navigateur, galerie, crop, thumbnail, téléchargement.

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

[](#installation)

```
composer require bnine/filesbundle
```

Dans `config/bundles.php` :

```
Bnine\FilesBundle\BnineFilesBundle::class => ['all' => true],
```

Routes
------

[](#routes)

RouteMéthodeDescription`bninefiles_files`GETNavigateur de fichiers`bninefiles_files_uploadmodal`GETPage d'upload (iframe)`bninefiles_files_uploadfile`POSTUpload de fichier`bninefiles_files_delete`POSTSuppression de fichier/dossier`bninefiles_files_mkdir`POSTCréation de dossier`bninefiles_files_download`GETTéléchargement de fichier`bninefiles_files_image`GETAffichage d'image inline`bninefiles_files_thumbnail`GETThumbnail auto-généré (300px)`bninefiles_files_gallery`GETGalerie d'images`bninefiles_files_crop_page`GETPage de crop (sélection imgAreaSelect)`bninefiles_files_crop`POSTApplication du crop (génère thumbnail 150x150)Form Type
---------

[](#form-type)

### IconUploadType

[](#iconuploadtype)

Champ de formulaire pour upload d'image avec preview et crop optionnel.

```
use Bnine\FilesBundle\Form\Type\IconUploadType;

$builder->add('avatar', IconType::class, [
    'label' => false,
    'required' => false,
    'icon_endpoint' => 'avatar',
    'icon_label' => 'Avatar',
    'icon_upload_url' => '/bninefiles/uploadmodal/avatar/0?path=&crop',
]);
```

Options :

- `icon_endpoint` : domaine pour les routes (défaut: `icon`)
- `icon_label` : label du bouton (défaut: `Icon`)
- `icon_empty_preview` : image par défaut quand vide
- `icon_upload_url` : URL de la modale d'upload. Ajouter `&crop` pour activer le crop.

Système de modal custom
-----------------------

[](#système-de-modal-custom)

Le bundle fournit un système de modal léger (pas de dépendance Bootstrap) via `bninefiles.js` :

```
// Ouvrir une modale
BnineModalOpen({
    id: 'ma-modale',           // ID unique
    title: 'Titre',            // Titre affiché
    url: '/path/to/iframe',    // URL chargée dans l'iframe
    height: '600px',           // Hauteur de l'iframe
    onClose: function () {}    // Callback appelé à la fermeture
});

// Fermer la modale (depuis l'iframe)
window.parent.BnineModalClose();
```

Twig Function
-------------

[](#twig-function)

### `bninefile()`

[](#bninefile)

Génère une URL valide pour un fichier stocké (upload ou statique) :

```

```

La fonction ajoute `/` si nécessaire. Compatible avec les anciens paths (`uploads/...`) et les nouvelles URLs bNineFilesBundle.

CSS
---

[](#css)

Le fichier `bninefiles.css` fournit le style du système de modal custom (`.bnine-overlay`, `.bnine-dialog`). À inclure dans le template de base :

```

```

Stockage
--------

[](#stockage)

Le bundle supporte le stockage local et S3 via Flysystem. Le `FileService` détecte automatiquement le mode via un paramètre `bool $s3`.

```
# config/services.yaml
Bnine\FilesBundle\Service\FileService:
    arguments:
        $storage: '@app_storage'
        $s3: '%env(bool:STORAGE_S3)%'
```

### Mode local

[](#mode-local)

```
STORAGE_DSN="local://uploads"
STORAGE_S3=0
```

### Mode S3

[](#mode-s3)

```
STORAGE_DSN="s3://bucket"
STORAGE_S3=1
S3_ENDPOINT="http://rustfs:9000"
S3_BUCKET="ninegate-uploads"
S3_ACCESS_KEY="rustfs"
S3_SECRET_KEY="changeme"
S3_REGION="us-east-1"
```

Voter
-----

[](#voter)

Le bundle fournit `AbstractFileVoter` abstrait. Dans l'app hôte, implémentez un voter concret :

```
class FileVoter extends AbstractFileVoter
{
    private const PUBLIC_DOMAINS = ['avatar', 'logo', 'icon'];

    protected function canView(string $domain, $id, TokenInterface $token): bool
    {
        if (in_array($domain, self::PUBLIC_DOMAINS)) {
            return true;
        }
        return $this->canManage($domain, $id, $token);
    }

    // canEdit, canDelete...
}
```

Structure des fichiers
----------------------

[](#structure-des-fichiers)

```
uploads/                          # Racine du stockage
  {domain}/                       # ex: blog, pagewidgetfile
    {id}/                         # ID de l'entité
      {fichier.jpg}               # Fichiers uploadés
      _thumbs/300xN/              # Thumbnails auto-générés
      _thumbs/{size}x{size}/      # Thumbnails de crop

```

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance97

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~28 days

Recently: every ~7 days

Total

14

Last Release

16d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ac94acd7c387d2e56bc4ebc93588330c1145b0089053263721ef9815846f3f8c?d=identicon)[arno](/maintainers/arno)

---

Top Contributors

[![afornerot](https://avatars.githubusercontent.com/u/44973732?v=4)](https://github.com/afornerot "afornerot (21 commits)")

---

Tags

symfonybundlefilesentitydirectoryuploadThumbnailsgalleryfile-browser

###  Code Quality

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/bnine-filesbundle/health.svg)

```
[![Health](https://phpackages.com/badges/bnine-filesbundle/health.svg)](https://phpackages.com/packages/bnine-filesbundle)
```

###  Alternatives

[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.4M236](/packages/sulu-sulu)[contao/core-bundle

Contao Open Source CMS

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

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

3.8k3.9M535](/packages/pimcore-pimcore)[league/flysystem-aws-s3-v3

AWS S3 filesystem adapter for Flysystem.

1.7k293.8M1.2k](/packages/league-flysystem-aws-s3-v3)[contao/contao

Contao Open Source CMS development package

43514.5k2](/packages/contao-contao)[open-dxp/opendxp

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

9626.1k68](/packages/open-dxp-opendxp)

PHPackages © 2026

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