php-collective / symfony-djot
Symfony bundle integration for php-collective/djot
Package info
github.com/php-collective/symfony-djot
Type:symfony-bundle
pkg:composer/php-collective/symfony-djot
Requires
- php: ^8.2
- php-collective/djot: ^0.1.24
- symfony/form: ^6.4 || ^7.0 || ^8.0
- symfony/framework-bundle: ^6.4 || ^7.0 || ^8.0
- symfony/twig-bundle: ^6.4 || ^7.0 || ^8.0
- symfony/validator: ^6.4 || ^7.0 || ^8.0
Requires (Dev)
- php-collective/code-sniffer: dev-master
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.5 || ^12.5 || ^13.0
- symfony/phpunit-bridge: ^6.4 || ^7.0 || ^8.0
This package is auto-updated.
Last update: 2026-04-01 02:21:50 UTC
README
Djot markup language integration for Symfony — Twig filters, services, forms, and validation.
Installation
composer require php-collective/symfony-djot
Usage
Twig Filter
{# Safe by default - XSS protection enabled #} {{ article.body|djot }} {# For trusted content only - no XSS protection #} {{ trustedContent|djot_raw }} {# Plain text output #} {{ article.body|djot_text }}
Service
use PhpCollective\SymfonyDjot\Service\DjotConverterInterface; class ArticleController { public function show(DjotConverterInterface $djot): Response { $html = $djot->toHtml($article->body); $text = $djot->toText($article->body); } }
Configuration
# config/packages/symfony_djot.yaml symfony_djot: converters: # Default has safe_mode: true (XSS protection enabled) default: ~ # For trusted content (admin, CMS) trusted: safe_mode: false cache: enabled: false pool: cache.app
Multiple Converter Profiles
Use different configurations for different contexts:
{# Default is safe #} {{ comment.body|djot }} {# Use named converter for trusted content #} {{ article.body|djot('trusted') }} {# Or use djot_raw for quick trusted rendering #} {{ article.body|djot_raw }}
public function __construct( // Default converter (safe mode enabled) private DjotConverterInterface $djot, // Trusted converter (safe mode disabled) #[Autowire(service: 'symfony_djot.converter.trusted')] private DjotConverterInterface $trusted, ) {}
Safe Mode
Safe mode is enabled by default for XSS protection. Disable only for trusted content:
symfony_djot: converters: trusted: safe_mode: false
Extensions
Enable djot-php extensions per converter:
symfony_djot: converters: default: extensions: - type: autolink - type: smart_quotes - type: heading_permalinks symbol: '#' position: after with_mentions: extensions: - type: mentions user_url_template: 'https://github.com/{username}' - type: table_of_contents
Available extensions:
admonition- Admonition blocks (note, tip, warning, danger, etc.)autolink- Auto-convert URLs to clickable linkscode_group- Transform code-group divs into tabbed interfacesdefault_attributes- Add default attributes to elements by typeexternal_links- Configure external link behavior (target, rel)frontmatter- Parse YAML/TOML/JSON frontmatter blocksheading_level_shift- Shift heading levels up/downheading_permalinks- Add anchor links to headingsheading_reference- Link to headings with[text](#heading)syntaxinline_footnotes- Convert spans with class to inline footnotesmentions- Convert @username to profile linksmermaid- Render Mermaid diagram code blockssemantic_span- Convert spans to<kbd>,<dfn>,<abbr>elementssmart_quotes- Convert straight quotes to typographic quotestable_of_contents- Generate TOC from headingstabs- Tabbed content blocks (CSS or ARIA mode)wikilinks- Support[[Page Name]]wiki-style links
See Extensions documentation for detailed configuration options.
Form Type
Use the DjotType for form fields that accept Djot markup:
use PhpCollective\SymfonyDjot\Form\Type\DjotType; $builder->add('body', DjotType::class);
Validation
Validate that a field contains valid Djot markup:
use PhpCollective\SymfonyDjot\Validator\Constraints\ValidDjot; class Article { #[ValidDjot] private string $body; }
Documentation
See the docs/ folder for detailed documentation:
- Installation
- Configuration
- Twig Usage
- Service Usage
- Forms
- Validation
- Safe Mode
- Extensions
- Caching
- Djot Syntax
What is Djot?
Djot is a modern light markup language created by John MacFarlane (author of CommonMark/Pandoc). It offers cleaner syntax and more features than Markdown while being easier to parse.
Learn more about Djot syntax at djot.net.