Installation
Run composer require --dev devtronic/cms-bundle and enable the bundle in AppKernel.php (Symfony 2/3).
For Symfony 3.x, execute:
php bin/console assets:install --symlink --relative
php bin/console doctrine:schema:update --force
php bin/console cache:clear
Basic Configuration
Add routing in app/config/routing.yml:
devtronic_cms_bundle:
resource: "@CmsBundle/Controller/"
type: annotation
prefix: /cms
First Use Case Display a menu in a Twig template:
{{ cms_menu("main_menu") }}
Ensure a menu with slug main_menu exists in the Sonata Admin panel (accessible at /admin).
Menu Management
/admin) to create Menu, MenuItem, and Page entities.main_menu, footer_links) for Twig integration.{{ cms_menu("SLUG") }}.Page Content Rendering
Page entities with slugs (e.g., about-us).{{ cms_page("about-us").content }}
IvoryCKEditorBundle (required dependency) for WYSIWYG editing.Dynamic Menu Templates Override default menu templates by extending:
{% extends "DevtronicCmsBundle:Menu:default.html.twig" %}
Place custom templates in app/Resources/DevtronicCmsBundle/views/Menu/.
Routing Integration
prefix in routing.yml (e.g., /cms/about-us).app/config/routing.yml:
cms_homepage:
path: /
defaults: { _controller: "CmsBundle:Page:show", slug: "home" }
Sonata Admin Customization
MenuAdmin, MenuItemAdmin, or PageAdmin for additional fields:
// src/AppBundle/Admin/MenuAdmin.php
use Devtronic\CmsBundle\Admin\MenuAdmin as BaseMenuAdmin;
class MenuAdmin extends BaseMenuAdmin {
protected function configureFormFields(FormMapper $formMapper) {
$formMapper->add('custom_field', 'text');
}
}
Outdated Dependencies
symfony/symfony:3.*) or fork the repo.Missing Multi-Language Support
trans() in Twig or a separate table.Asset Pipeline Issues
assets:install is skipped.php bin/console assets:install --symlink after updates.Sonata Admin Conflicts
sonata-project/admin-bundle first.Doctrine Schema Updates
--force on doctrine:schema:update may overwrite existing data.cache:clear after config changes or bundle updates.APP_DEBUG=true) for Twig/Doctrine errors.DevtronicCmsBundle).Custom Menu Rendering
Override the MenuType service to modify menu logic:
# app/config/services.yml
services:
devtronic_cms.menu.type.custom:
class: AppBundle\Twig\Extension\CustomMenuExtension
tags:
- { name: twig.extension }
Page Content Processing
Extend the Page entity to add custom fields or behaviors:
// src/AppBundle/Entity/PageExtension.php
use Devtronic\CmsBundle\Entity\Page as BasePage;
class PageExtension extends BasePage {
private $metaTitle;
// Add getters/setters and Doctrine lifecycle callbacks.
}
Event Listeners
Hook into CMS events (e.g., cms.menu.build) via Symfony’s event dispatcher:
// src/AppBundle/EventListener/CmsListener.php
use Devtronic\CmsBundle\Event\MenuBuildEvent;
class CmsListener {
public function onMenuBuild(MenuBuildEvent $event) {
$event->addItem('custom_item', ['route' => 'some_route']);
}
}
Register in services.yml:
services:
app.cms_listener:
class: AppBundle\EventListener\CmsListener
tags:
- { name: kernel.event_listener, event: cms.menu.build, method: onMenuBuild }
How can I help you explore Laravel packages today?