acseo/pagebuilder-bundle
Symfony bundle that embeds a GrapesJS-based page builder. Provides Twig components to edit and render pages, plus a Page entity and controller to load/store HTML, CSS, and JSON. Configurable asset loading, plugins, and blocks.
PageBuilder and PageRender) enable modular integration into existing templates without monolithic overrides.PageRender) requires careful handling of hydration/dehydration cycles in Twig.PageController lacks built-in RBAC; integration with Symfony’s security system (e.g., Voters, Guard) is manual.Page entity fields (e.g., HTML sanitization, CSS injection risks).Page entities could lead to race conditions without optimistic locking.Page entities include soft deletes, versioning, or audit logs?PageRender components be cached (e.g., via Symfony’s HTTP cache or Varnish)?Page entities be tested in pipelines?grapesjs as an external dependency in webpack.config.js.@vitejs/plugin-basic-ssl for local development with GrapesJS.symfony/panther for browser testing of GrapesJS UI.composer require acseo/pagebuilder-bundle
bundles.php:
// config/bundles.php
ACSEO\PageBuilderBundle\PageBuilderBundle::class => ['all' => true],
# config/routes/acseo_page_builder.yaml
acseo_page_builder:
resource: '@PageBuilderBundle/src/Controller/'
type: attribute
prefix: '/admin/page-builder'
php bin/console make:migration
php bin/console doctrine:migrations:migrate
Page entity (e.g., add createdAt, updatedAt).// webpack.config.js
Encore
.addEntry('admin/page-builder', './assets/js/page-builder.js')
.enableSingleRuntimeChunk()
.copyFiles({
from: './node_modules/grapesjs/dist/grapes.min.js',
to: 'build/js/[name].js',
});
{% component('PageBuilder', {'idField': 'content'}) %}
PageRender:
{% component('PageRender', {'html': page.html}) %}
ResponseCache middleware).Page entity and PageController.Page entity and controllers.acseo/pagebuilder-bundle for breaking changes (e.g., GrapesJS major versions).Page entity extensions.window.onerror).Page entity backup strategy (e.g., daily exports).Page entity fields (e.g., slug, published_at) for large-scale queries.How can I help you explore Laravel packages today?