xlabs/trumbowygbundle
Laravel bundle that integrates the Trumbowyg WYSIWYG editor into your app. Provides ready-to-use assets, configuration, and helpers to add lightweight rich-text editing to forms and admin pages with minimal setup.
Installation
composer require xlabs/trumbowygbundle
Add to config/app.php under providers:
Xlabs\TrumbowygBundle\TrumbowygBundle::class,
Basic Usage in Twig
{{ trumbowyg({
name: 'content',
config: {
btns: ['bold', 'italic', 'undo', 'redo']
}
}) }}
Renders a WYSIWYG editor with minimal buttons.
First Use Case
use Xlabs\TrumbowygBundle\Form\Type\TrumbowygType;
$builder->add('description', TrumbowygType::class, [
'config' => ['btns' => ['bold', 'link']],
]);
Dynamic Configuration Pass runtime config via Twig or form options:
{{ trumbowyg({
name: 'article_body',
config: app.config.get('trumbowyg.defaults')
}) }}
Override defaults in config/packages/xlabs_trumbowyg.yaml.
Asset Management
config/packages/xlabs_trumbowyg.yaml:
assets:
js: 'bundles/trumbowyg/js/trumbowyg.min.js'
css: 'bundles/trumbowyg/css/trumbowyg.min.css'
Form Handling
Length) on Trumbowyg fields.htmlspecialchars or a custom filter:
$builder->add('content', TrumbowygType::class, [
'mapped' => false,
'attr' => ['data-sanitize' => true],
]);
Event Listeners
tbwyg.init):
document.addEventListener('tbwyg.init', (e) => {
if (e.detail.name === 'content') {
e.detail.editor.addButton('custom', { ... });
}
});
Asset Loading
assets/install.js includes:
import 'trumbowyg/dist/trumbowyg.min';
Form Submission
HtmlEntityEncoder or a custom form type extension:
$builder->get('content')->addModelTransformer(new CallbackTransformer(
fn($html) => strip_tags($html, '<p><strong><em>'),
fn($text) => nl2br(e($text))
));
Configuration Overrides
config/packages/...) may conflict with per-field settings.merge in Twig:
{{ trumbowyg({
config: app.config.get('trumbowyg.defaults')|merge({
btns: ['bold', 'custom']
})
}) }}
Uncaught TypeError (missing assets).debug: true in config/packages/twig.yaml to inspect rendered HTML.document.addEventListener('tbwyg.change', (e) => console.log(e.detail));
Custom Buttons Extend TrumboWYG’s buttons via JavaScript:
$.extend(true, $.trumbowyg.btnsDef, {
custom: {
dropdown: ['sub1', 'sub2'],
fn: (api) => { /* logic */ }
}
});
Symfony Integration
PRE_SET_DATA/POST_SUBMIT to modify editor state:
$builder->addEventListener(FormEvents::PRE_SET_DATA, fn($event) => {
$event->getData()['config']['btns'][] = 'custom';
});
Localization
Override language files in translations/messages.xlabs_trumbowyg.en.yaml:
trumbowyg:
btns:
bold: "Make it bold!"
How can I help you explore Laravel packages today?