PHPackages                             ajay/sylius-media-hub-plugin - 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. [Image &amp; Media](/categories/media)
4. /
5. ajay/sylius-media-hub-plugin

ActiveSylius-plugin[Image &amp; Media](/categories/media)

ajay/sylius-media-hub-plugin
============================

Centralized Sylius admin dashboard for product and taxon images.

11↑2900%PHP

Since Jun 8Pushed yesterdayCompare

[ Source](https://github.com/ajsymfony/sylius-media-hub-plugin)[ Packagist](https://packagist.org/packages/ajay/sylius-media-hub-plugin)[ RSS](/packages/ajay-sylius-media-hub-plugin/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (2)Used By (0)

Sylius Media Hub Plugin
=======================

[](#sylius-media-hub-plugin)

Sylius Media Hub is a lightweight Sylius admin plugin that centralizes Product and Taxon image visibility in one place.

Tagline: Manage all Product and Taxon images from a single screen.

Purpose
-------

[](#purpose)

This plugin is designed as:

- A media visibility tool
- A catalog image audit tool
- A productivity tool for Sylius administrators

This plugin is not a DAM, CMS, image editor, or replacement for Sylius image management.

Compatibility
-------------

[](#compatibility)

- Sylius `^2.0`
- Symfony `^6.4 || ^7.0`
- PHP `^8.2`

Features
--------

[](#features)

- Centralized dashboard for Product and Taxon images
- Statistics cards for total, product, taxon, and missing images
- Missing-image badges with direct drill-down links
- Server-side search across product name/code and taxon name/slug
- Server-side sorting and pagination
- Dedicated Product, Taxon, and Missing views
- Direct links back to the standard Sylius Product and Taxon edit pages
- Read-only catalog auditing with no entity overrides

Architecture
------------

[](#architecture)

The plugin keeps Sylius core image entities untouched and reads from the existing Product, ProductImage, Taxon, and TaxonImage models.

Key design choices:

- Read-only DBAL projections for fast list and audit queries
- No entity decoration or schema changes
- Native Symfony services and Dependency Injection
- Native Sylius admin layout and menu integration
- GridBundle used for the missing-images table

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

[](#installation)

This is the exact setup used in the host project.

### 1. Add The GitHub Repository To The Main Project

[](#1-add-the-github-repository-to-the-main-project)

If the plugin is not published on Packagist yet, add it as a VCS repository in the main project `composer.json`:

```
{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/ajsymfony/sylius-media-hub-plugin.git"
    }
  ]
}
```

### 2. Require The Plugin In The Main Project

[](#2-require-the-plugin-in-the-main-project)

Add the package to `require`:

```
{
  "require": {
    "ajay/sylius-media-hub-plugin": "dev-master"
  }
}
```

### 3. Install it with Composer:

[](#3-install-it-with-composer)

```
composer require ajay/sylius-media-hub-plugin:dev-master
```

### 4. Register The Bundle

[](#4-register-the-bundle)

Add the bundle to `config/bundles.php`:

```
return [
    // ...
    Ajay\SyliusMediaHubPlugin\SyliusMediaHubPlugin::class => ['all' => true],
];
```

### 5. Import The Admin Routes

[](#5-import-the-admin-routes)

Create `config/routes/ajay_sylius_media_hub.yaml`:

```
ajay_sylius_media_hub:
    resource: "@SyliusMediaHubPlugin/config/routes/admin.yaml"
    prefix: '/%sylius_admin.path_name%'
```

### 6. Clear Cache

[](#6-clear-cache)

```
php bin/console cache:clear
```

### Notes

[](#notes)

- Package name stays lowercase: `ajay/sylius-media-hub-plugin`
- PHP namespace stays capitalized: `Ajay\SyliusMediaHubPlugin`
- The plugin adds no migrations, entity overrides, or asset build requirements
- If you update the plugin source, run `composer update ajay/sylius-media-hub-plugin`

Plugin Configuration
--------------------

[](#plugin-configuration)

The plugin works without any required custom configuration.

Optional configuration:

```
# config/packages/ajay_sylius_media_hub.yaml
ajay_sylius_media_hub:
    default_limit: 24
    pagination_limits: [24, 48, 96]
```

### Configuration Reference

[](#configuration-reference)

- `default_limit`Default results per page Must be one of the configured pagination limits
- `pagination_limits`Allowed page sizes shown in the admin UI

Security Integration
--------------------

[](#security-integration)

- Routes are meant to be mounted under the existing Sylius admin prefix
- Access is guarded by `ROLE_ADMINISTRATION_ACCESS`
- The menu entry is added to the Sylius admin Catalog section
- No extra ACL schema or permissions table is introduced

What Gets Added To The Host Project
-----------------------------------

[](#what-gets-added-to-the-host-project)

- Bundle registration in `config/bundles.php`
- Admin route import in `config/routes/ajay_sylius_media_hub.yaml`
- Optional configuration in `config/packages/ajay_sylius_media_hub.yaml`

Verification Checklist
----------------------

[](#verification-checklist)

After installation, verify with:

```
php bin/console debug:router | grep media-hub
php bin/console debug:container | grep SyliusMediaHubPlugin
php bin/console cache:clear
```

Expected routes:

- `ajay_sylius_media_hub_admin_index`
- `ajay_sylius_media_hub_admin_products`
- `ajay_sylius_media_hub_admin_taxons`
- `ajay_sylius_media_hub_admin_missing`

Expected UI behavior:

- `Catalog > Media Hub` appears in the admin menu
- `/admin/media-hub` loads for administrators
- Product and Taxon edit buttons point to standard Sylius admin edit screens

Routes
------

[](#routes)

- `/admin/media-hub`
- `/admin/media-hub/products`
- `/admin/media-hub/taxons`
- `/admin/media-hub/missing`

Security
--------

[](#security)

The routes are protected for Sylius administrators and live under the existing admin firewall. The controller also enforces `ROLE_ADMINISTRATION_ACCESS`.

Template Overrides
------------------

[](#template-overrides)

If a project wants to customize the plugin UI, override its templates in the host app just like any other Symfony bundle templates:

```
templates/bundles/SyliusMediaHubPlugin/...

```

Testing
-------

[](#testing)

Run the plugin test suite from the project root:

```
vendor/bin/phpunit -c vendor/ajay/sylius-media-hub-plugin/phpunit.xml.dist
```

Troubleshooting
---------------

[](#troubleshooting)

If the menu entry does not appear:

- confirm the bundle is in `config/bundles.php`
- confirm the admin route import exists
- clear cache
- ensure you are logged in as an administrator

If routes are missing:

- confirm `config/routes/ajay_sylius_media_hub.yaml` exists
- run `php bin/console debug:router | grep media-hub`

If the package disappears after Composer operations:

- the host project is missing a proper root `composer.json` dependency declaration
- move the plugin source out of `vendor/` and install it through Composer from a path repo, VCS repo, or published package

Future Extension Points
-----------------------

[](#future-extension-points)

The current implementation intentionally leaves room for future modules such as:

- Direct image replacement/upload from the gallery
- Bulk upload and replacement flows
- Duplicate or unused image detection
- Large-image and format audits
- AI-assisted SEO/media enrichment

Maintainer
----------

[](#maintainer)

- Ajay Singh
- Email: `ajayplanet5@gmail.com`

Feedback, suggestions, bug reports, and collaboration inquiries are welcome at `ajayplanet5@gmail.com`.

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance65

Regular maintenance activity

Popularity4

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity13

Early-stage or recently created project

 Bus Factor1

Top contributor holds 71.4% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/4f4852f96dfef167ce39b64daa597571e56b9fdd91c34f75cd8d98faa25eaf7d?d=identicon)[ajaysingh2121](/maintainers/ajaysingh2121)

---

Top Contributors

[![ajsymfony](https://avatars.githubusercontent.com/u/37686115?v=4)](https://github.com/ajsymfony "ajsymfony (5 commits)")[![ajayplanet](https://avatars.githubusercontent.com/u/17045104?v=4)](https://github.com/ajayplanet "ajayplanet (2 commits)")

### Embed Badge

![Health badge](/badges/ajay-sylius-media-hub-plugin/health.svg)

```
[![Health](https://phpackages.com/badges/ajay-sylius-media-hub-plugin/health.svg)](https://phpackages.com/packages/ajay-sylius-media-hub-plugin)
```

###  Alternatives

[goat1000/svggraph

Generates SVG graphs

132890.0k3](/packages/goat1000-svggraph)[imagekit/imagekit

PHP library for Imagekit

46877.3k10](/packages/imagekit-imagekit)[jdenticon/jdenticon

Render PNG and SVG identicons.

62413.4k6](/packages/jdenticon-jdenticon)[gravatarphp/gravatar

Gravatar URL builder which is most commonly called as a Gravatar library

16644.1k2](/packages/gravatarphp-gravatar)

PHPackages © 2026

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