aropixel/blog-bundle
A Symfony blog management bundle for the Aropixel Admin Bundle, with posts, categories, rich content fields, SEO metadata, scheduled publication, featured image crops, multilingual translations, and customizable entities and forms.
BlogBundle 3.0 is a rewrite built on AdminBundle 3.0. It is not a Laravel package. The new release doubles down on Symfony/Twig integration ("shared list and actions macros"), which makes Laravel adoption harder, not easier. There is no in-place upgrade path from BlogBundle 1.x/2.x — v3.0 requires a fresh installation.
Confirm your Laravel stack can run Symfony 6.4+/Doctrine ORM 2–3
laravel-doctrine/orm (or equivalent) for entity mapping and migrations.Install the AdminBundle 3.0 dependency first
composer require aropixel/admin-bundle:^3.0 aropixel/blog-bundle:^3.0
BlogBundle 3.0 will not resolve without AdminBundle ^3.0.
Follow the official installation guide — not the legacy config The 3.0 install steps live at:
doc/installation.md (BlogBundle)UPGRADE-3.0.md (read even if "upgrading" — it explains the new entity/UI wiring)Do not reuse aropixel_blog.yaml from v2 — the config surface changed in the rewrite (see Gotchas).
First Use Case: Content Management via AdminBundle 3.0 UI The primary intended workflow is admin-driven, not programmatic. After installing, posts and categories are managed through AdminBundle 3.0's CRUD UI using the shared list/actions macros. In a Laravel app this means:
EntityManager (loses the "shared macros" benefit).First programmatic post (unchanged in shape)
$post = new App\Entity\Post();
$post->setTitle('Laravel + Symfony Bridge');
$post->setSlug('laravel-symfony');
$post->setContent('...');
$em->persist($post);
$em->flush();
If multilingual: attach a translation (see i18n below) — v3.0 ships its own doc/i18n.md.
v3.0's headline feature is that posts/categories are managed entirely in the AdminBundle 3.0 UI using shared list and actions macros. Implications for Laravel:
v3.0 promotes i18n to its own doc (doc/i18n.md). Pattern:
$post->setTranslation('en', new PostTranslation('Title', 'Body'));
$post->setTranslation('fr', new PostTranslation('Titre', 'Corps'));
Locales are configured on AdminBundle (not BlogBundle) in 3.0 — check AdminBundle 3.0 config, not the old aropixel_blog.yaml locales key.
The v2 pattern of mapping Aropixel\BlogBundle\Entity\PostInterface → App\Entity\Post may have changed in the rewrite. Check UPGRADE-3.0.md for the new extension strategy before writing entity subclasses. Do not assume the old aropixel_blog.entities key still exists.
Querying via Doctrine repositories (as in v2) is still the way to consume posts programmatically — the rewrite is primarily UI/admin-focused:
$repo = $em->getRepository(App\Entity\Post::class);
$published = $repo->findBy(['publishedAt' => null]);
Confirm repository method signatures against v3.0 source; interfaces may have shifted.
If v2's aropixel_blog.forms.* override points still exist (verify in doc/installation.md), the same pattern applies. Otherwise, extension moves into AdminBundle 3.0 form configuration.
UPGRADE-3.0.md explicitly states there is no in-place upgrade. Any v2 config, custom entities, or repository overrides must be re-validated against 3.0 docs before copying. Budget rework time if you were on 2.x.
routes/web.php + YamlFileLoader trick from the old assessment works only if you're already bridging Symfony routing.The v2 assessment referenced:
aropixel_blog.categories: 'all'aropixel_blog.entities.PostInterface: App\Entity\Postaropixel_blog.forms.post_translatableNone of these are confirmed in the 3.0 release notes. Read doc/installation.md and UPGRADE-3.0.md end-to-end before configuring. The rewrite's config surface is the most likely source of "silent no-op" bugs (config accepted but ignored).
3.0 has its own i18n doc — treat it as authoritative rather than inferring from AdminBundle 2.x behavior. Common failure modes still apply:
locale set.| Symptom | First suspect |
|---|---|
| Bundle installs but admin has no blog menu | AdminBundle 3.0 resource registration (not BlogBundle yaml) |
| Custom entity not picked up | New entity-extension mechanism in UPGRADE-3.0.md |
| Translations render empty | Locale not declared on AdminBundle layer |
| Macros render as raw text | Twig not wired (you're in Blade) |
Version conflict on composer require |
Symfony or Doctrine ORM constraint vs. AdminBundle 3.0 |
| Old v2 config silently ignored | Config keys renamed/removed in rewrite — check installation doc |
fetch="EAGER" or JOINs) — N+1 on multilingual is the classic trap.post.publish, prePersist, etc.); confirm event names haven't changed.How can I help you explore Laravel packages today?