php-collective/symfony-djot 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

php-collective/symfony-djot

Composer 安装命令:

composer require php-collective/symfony-djot

包简介

Symfony bundle integration for php-collective/djot

README 文档

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

{# 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 links
  • code_group - Transform code-group divs into tabbed interfaces
  • 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_level_shift - Shift heading levels up/down
  • heading_permalinks - Add anchor links to headings
  • heading_reference - Link to headings with [text](#heading) syntax
  • inline_footnotes - Convert spans with class to inline footnotes
  • mentions - Convert @username to profile links
  • mermaid - Render Mermaid diagram code blocks
  • semantic_span - Convert spans to <kbd>, <dfn>, <abbr> elements
  • smart_quotes - Convert straight quotes to typographic quotes
  • table_of_contents - Generate TOC from headings
  • tabs - 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

Full documentation: php-collective.github.io/symfony-djot

Demo Application

See the symfony-djot-demo for a complete example application.

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.

php-collective/symfony-djot 适用场景与选型建议

php-collective/symfony-djot 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 7 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 03 月 27 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「symfony」 「twig」 「parser」 「bundle」 「markup」 「djot」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 php-collective/symfony-djot 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 php-collective/symfony-djot 我们能提供哪些服务?
定制开发 / 二次开发

基于 php-collective/symfony-djot 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 7
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 21
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-27