markup-carve/laravel-carve
Composer 安装命令:
composer require markup-carve/laravel-carve
包简介
Laravel integration for markup-carve/carve-php — Blade directives, services, validation, and caching
README 文档
README
Carve markup language integration for Laravel — Blade directives, services, validation, and caching.
Installation
composer require markup-carve/laravel-carve
The service provider and Carve facade alias are auto-discovered via Laravel's package discovery.
Optionally publish the config:
php artisan vendor:publish --tag=carve-config
Usage
Blade Directives
{{-- Safe by default - XSS protection enabled --}} @carve($article->body) {{-- For trusted content only - no XSS protection --}} @carveRaw($trustedContent) {{-- Plain text output (escaped) --}} @carveText($article->body)
Facade
use MarkupCarve\LaravelCarve\Facades\Carve; $html = Carve::toHtml($source); $text = Carve::toText($source); $raw = Carve::toHtmlRaw($trustedSource);
Dependency Injection
use MarkupCarve\LaravelCarve\Service\CarveConverterInterface; use MarkupCarve\LaravelCarve\Service\CarveManager; class ArticleController { public function __construct( private CarveConverterInterface $carve, private CarveManager $manager, ) {} public function show(Article $article): View { return view('article.show', [ 'html' => $this->carve->toHtml($article->body), 'text' => $this->carve->toText($article->body), 'docs' => $this->manager->toHtml($article->body, 'docs'), ]); } }
Configuration
// config/carve.php return [ 'converters' => [ // Default has safe_mode: true (XSS protection enabled) 'default' => [ 'safe_mode' => true, ], // For trusted content (admin, CMS) 'trusted' => [ 'safe_mode' => false, ], ], 'cache' => [ 'enabled' => false, 'store' => null, ], ];
Multiple Converter Profiles
Use different configurations for different contexts:
{{-- Default is safe --}} @carve($comment->body) {{-- Use named converter for trusted content --}} {!! Carve::toHtml($article->body, 'trusted') !!} {{-- Or use @carveRaw for quick trusted rendering --}} @carveRaw($article->body)
Safe Mode
Safe mode is enabled by default for XSS protection. Disable only for trusted content:
'converters' => [ 'trusted' => [ 'safe_mode' => false, ], ],
Extensions
Enable carve-php extensions per converter:
'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}', ], 'table_of_contents', ], ], ],
Available extensions:
admonition- Admonition blocks (note, tip, warning, danger, etc.)autolink- Auto-convert URLs to clickable linkscitations- Bracketed citations with an in-document bibliography (numbered or author-date)code_callouts- Numbered callout markers on fenced-code lines with a bound explanation listcode_group- Transform code-group divs into tabbed interfacescolor_swatch- Inline color swatches for CSS color tokens via thecolorroledefault_attributes- Add default attributes to elements by typedetails- Render::: detailsblocks as native<details>/<summary>widgetsexternal_links- Configure external link behavior (target, rel)fenced_render- Emit fenced blocks of a chosen language as client-rendered hydration elementsfrontmatter- Parse YAML/TOML/JSON frontmatter blocksglossary- Glossary definition lists with linked term referencesheading_level_shift- Shift heading levels up/downheading_numbers- Auto-number sections and rewrite heading cross-referencesheading_permalinks- Add anchor links to headingsheading_reference- Link to headings with[text](#heading)syntaxindex- Collect:index[term]markers into a sorted index blockinline_footnotes- Convert spans with class to inline footnoteslist_table- Author tables as nested lists (::: list-table) with block content in cellsmath_block- Rendermathfenced code blocks as display mathmentions- Convert @username to profile linksmermaid- Render Mermaid diagram code blockssemantic_span- Convert spans to<kbd>,<dfn>,<abbr>elementssmart_quotes- Convert straight quotes to typographic quotesspoiler- Hidden spoiler content revealed on interactiontab_normalize- Expand tabs in code content to spaces at render timetable_of_contents- Generate TOC from headingstabs- Tabbed content blocks (CSS or ARIA mode)toc_placement- Render the TOC exactly where a::: tocblock appearswikilinks- Support[[Page Name]]wiki-style links
See Extensions documentation for detailed configuration options.
Validation Rule
Validate that a field contains valid Carve markup:
use MarkupCarve\LaravelCarve\Rules\ValidCarve; $request->validate([ 'body' => ['required', 'string', new ValidCarve()], ]);
Documentation
Full documentation: markup-carve.github.io/laravel-carve
- Installation
- Configuration
- Blade Usage
- Service Usage
- Validation
- Safe Mode
- Extensions
- Caching
- Carve Syntax
Demo Application
See the laravel-carve-demo for a complete example application.
What is Carve?
Carve is a post-Markdown lightweight markup language. It builds on the foundations of Djot, John MacFarlane's post-Markdown project, and offers cleaner syntax and more features than Markdown while being easier to parse.
Learn more about Carve syntax at github.com/markup-carve/carve.
Ecosystem
This package is part of the Carve organization - the spec with its conformance corpus, three byte-identical reference implementations (JS, PHP, Rust), editor plugins, and framework integrations. See awesome-carve for a curated list of everything Carve.
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-07-09