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
- 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-03-27 19:38:12 UTC
README
Djot markup language integration for Symfony — Twig filters, services, forms, and validation.
Installation
composer require php-collective/symfony-djot
Usage
Twig Filter
{# Filter syntax #} {{ article.body|djot }} {# Function syntax for inline strings #} {{ djot('_emphasis_ and *strong*') }} {# 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: safe_mode: false user_content: safe_mode: true cache: enabled: false pool: cache.app
Multiple Converter Profiles
Use different configurations for different contexts:
{{ comment.body|djot('user_content') }}
public function __construct( #[Autowire(service: 'symfony_djot.converter.user_content')] private DjotConverterInterface $safeConverter, ) {}
Safe Mode
Enable safe mode when processing untrusted user input for XSS protection:
symfony_djot: converters: user_content: safe_mode: true
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:
autolink- Auto-convert URLs to clickable linksdefault_attributes- Add default attributes to elements by typeexternal_links- Configure external link behavior (target, rel)frontmatter- Parse YAML/TOML/JSON frontmatter blocksheading_permalinks- Add anchor links to headingsmentions- Convert @username to profile linkssemantic_span- Convert spans to<kbd>,<dfn>,<abbr>elementssmart_quotes- Convert straight quotes to typographic quotestable_of_contents- Generate TOC from headingswikilinks- 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.