php-collective/symfony-djot

Symfony bundle integration for php-collective/djot

Maintainers

Package info

github.com/php-collective/symfony-djot

Type:symfony-bundle

pkg:composer/php-collective/symfony-djot

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

0.1.0 2026-03-27 06:54 UTC

This package is auto-updated.

Last update: 2026-03-27 19:38:12 UTC


README

CI PHP License

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 links
  • default_attributes - Add default attributes to elements by type
  • external_links - Configure external link behavior (target, rel)
  • frontmatter - Parse YAML/TOML/JSON frontmatter blocks
  • heading_permalinks - Add anchor links to headings
  • mentions - Convert @username to profile links
  • semantic_span - Convert spans to <kbd>, <dfn>, <abbr> elements
  • smart_quotes - Convert straight quotes to typographic quotes
  • table_of_contents - Generate TOC from headings
  • 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:

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.