componist/code-block
Composer 安装命令:
composer require componist/code-block
包简介
Laravel client for Template Archive API – fetch code blocks, categories, template images and write Blade templates to resources/views/pages
README 文档
README
Laravel-Client für die Template Archive API: Code-Blöcke und Kategorien abrufen, Template-Vorschaubilder als URLs nutzen und Blade-Templates in resources/views (z. B. unter pages) erzeugen.
Namespace: Componist\CodeBlock
Voraussetzungen
- PHP 8.2+
- Laravel 11 oder 12
- Template-Archive-Instanz mit aktivierter API und API-Schlüssel
Installation
composer require componist/code-block
Kein Publish nötig – Konfiguration erfolgt über .env. Das Builder-JavaScript wird per Route aus dem Package ausgeliefert.
Konfiguration
Übersicht: Alle Einstellungen
| .env-Variable | Config-Schlüssel | Standard | Beschreibung |
|---|---|---|---|
BASE_URL |
base_url |
siehe Config | Basis-URL für API-Aufrufe und Preview-Bilder (ohne trailing slash). In der Package-Config: env('BASE_URL', 'http://templatearchive.test'). In der App empfohlen: BASE_URL oder APP_URL in .env setzen. |
TEMPLATE_ARCHIVE_API_KEY |
api_key |
'' |
API-Schlüssel der Template-Archive-Instanz (beginnt mit ta_). |
TEMPLATE_ARCHIVE_VIEWS_PATH |
views_path |
pages |
Unterordner unter resources/views, in dem Blade-Templates erzeugt werden (z. B. pages → resources/views/pages/). |
| – | api_cache_enabled |
true |
API-Antworten (Kategorien, Code-Blöcke) cachen. |
| – | api_cache_ttl_minutes |
30 |
Cache-Laufzeit in Minuten (nur wirksam wenn api_cache_enabled true). |
CODE_BLOCK_TEMPLATE_ROUTE_ENABLED |
route.enabled |
true |
Route zum Anzeigen gebauter Templates aktivieren. |
CODE_BLOCK_TEMPLATE_ROUTE_PREFIX |
route.prefix |
(leer = views_path) | URL-Prefix für Template-Anzeige (z. B. pages oder template). Leer = Wert von views_path. |
CODE_BLOCK_TEMPLATE_ROUTE_NAME |
route.name |
code-block.template.show |
Name der Template-Anzeige-Route. |
| – | route.middleware |
[] |
Middleware für die Template-Anzeige-Route (z. B. ['web'], ['auth']). |
CODE_BLOCK_BUILDER_API_PREFIX |
builder.api_prefix |
code-block-builder |
URL-Prefix für Builder-API (Kategorien, Blöcke, Speichern) und Asset. |
CODE_BLOCK_BUILDER_OMIT_CDN |
builder.omit_cdn |
false |
true = Tailwind und Alpine nicht per CDN laden (wenn die Host-App sie bereits einbindet). |
| – | builder.middleware |
['web'] |
Middleware für alle Builder-API-Routen. |
CODE_BLOCK_BUILDER_ROUTE_ENABLED |
builder.route.enabled |
true |
Eigene Builder-Seiten-Route aktivieren. |
CODE_BLOCK_BUILDER_ROUTE_PATH |
builder.route.path |
builder |
URL-Pfad der Builder-Seite (z. B. /builder). |
CODE_BLOCK_BUILDER_ROUTE_NAME |
builder.route.name |
code-block.builder.page |
Name der Builder-Seiten-Route. |
| – | builder.route.middleware |
['web'] |
Middleware für die Builder-Seiten-Route. |
CODE_BLOCK_BUILDER_PAGE_TITLE |
builder.page_title |
Template Builder |
Seitentitel der Builder-Seite. |
Kompletter .env-Block (zum Kopieren)
Alle per .env konfigurierbaren Optionen in einem Block. Einfach in die .env einfügen und anpassen. Auskommentierte Zeilen sind optional bzw. nutzen den Standard.
# --------------------------------------------------------------------------- # Componist Code-Block (Template Archive API Client) # --------------------------------------------------------------------------- # Basis-URL der Template-Archive-Instanz (API + Preview-Bilder). Ohne Schrägstrich am Ende. BASE_URL=${APP_URL} # API-Schlüssel aus dem Template-Archive-Admin (Einstellungen → API). Beginnt mit ta_ TEMPLATE_ARCHIVE_API_KEY= # Unterordner unter resources/views für erzeugte Blade-Templates (z. B. pages) TEMPLATE_ARCHIVE_VIEWS_PATH=pages # Route: gebaute Templates im Browser anzeigen (GET /pages/hero-page etc.) CODE_BLOCK_TEMPLATE_ROUTE_ENABLED=true # CODE_BLOCK_TEMPLATE_ROUTE_PREFIX=pages # CODE_BLOCK_TEMPLATE_ROUTE_NAME=code-block.template.show # Builder-API und Builder-Seite CODE_BLOCK_BUILDER_API_PREFIX=code-block-builder CODE_BLOCK_BUILDER_ROUTE_ENABLED=true CODE_BLOCK_BUILDER_ROUTE_PATH=builder # CODE_BLOCK_BUILDER_ROUTE_NAME=code-block.builder.page CODE_BLOCK_BUILDER_PAGE_TITLE=Template Builder # Tailwind/Alpine nicht per CDN laden (true wenn die App sie schon einbindet) # CODE_BLOCK_BUILDER_OMIT_CDN=false
Hinweis: api_cache_enabled und api_cache_ttl_minutes sowie die Middleware-Arrays werden nur in der Config-Datei gesetzt (nach php artisan vendor:publish --tag=componist-code-block-config).
Im Package liegt außerdem die Datei env.code-block.example – Inhalt in die .env der App kopieren und anpassen.
Minimale .env-Einträge
TEMPLATE_ARCHIVE_API_KEY=ta_ihr_48_zeichen_langer_schluessel TEMPLATE_ARCHIVE_VIEWS_PATH=pages
Optional, falls die App nicht unter APP_URL erreichbar ist:
BASE_URL=https://ihre-template-archive-instanz.de
Config-Datei optional veröffentlichen
php artisan vendor:publish --tag=componist-code-block-config
Danach: config/code-block.php anpassen. Werte aus .env haben Vorrang, sofern sie dort gesetzt sind.
Builder-Assets optional veröffentlichen
Falls Sie template-builder.js selbst ausliefern möchten (z. B. für CDN/Cache):
php artisan vendor:publish --tag=componist-code-block-assets
Datei landet in public/vendor/code-block/template-builder.js. Standardmäßig wird das Script über die Route GET /code-block-builder/assets/template-builder.js aus dem Package geliefert.
Nutzung
Client injizieren
use Componist\CodeBlock\Client; // Im Controller, Job, Command etc. public function __construct( private Client $client ) {}
Code-Blöcke
| Methode | Beschreibung |
|---|---|
getCodeBlocks(?int $categoryId = null): array |
Alle Code-Blöcke; optional gefiltert nach category_id. Wirft Illuminate\Http\Client\RequestException bei API-Fehlern. |
getCodeBlock(int $id): array |
Einzelnen Code-Block nach ID. |
$blocks = $client->getCodeBlocks(); // alle $blocks = $client->getCodeBlocks(categoryId: 1); $block = $client->getCodeBlock(7);
Kategorien
| Methode | Beschreibung |
|---|---|
getCodeCategories(): array |
Alle Code-Kategorien. |
getCodeCategory(int $id): array |
Eine Kategorie inkl. zugehöriger code_blocks. |
$categories = $client->getCodeCategories(); $category = $client->getCodeCategory(1);
Preview-Bilder
Die API liefert bei Code-Blöcken preview_image als relativen Pfad (z. B. code-blocks/abc.jpg). Der Client baut daraus die volle URL.
| Methode | Beschreibung |
|---|---|
getPreviewImageUrl(?string $previewImagePath): ?string |
Aus relativem Pfad wird {BASE_URL}/storage/{path} (ohne public/ im Pfad). |
withPreviewImageUrls(array $blocks): array |
Fügt jedem Block im Array das Feld preview_image_url hinzu (in place). |
$url = $client->getPreviewImageUrl($block['preview_image']); $blocks = $client->getCodeBlocks(1); $blocks = $client->withPreviewImageUrls($blocks); // Jeder Eintrag hat nun zusätzlich 'preview_image_url'
Blade-Templates erzeugen
| Methode | Beschreibung |
|---|---|
createTemplateFromBlockId(int $codeBlockId, string $filename): string |
Holt den Block von der API und schreibt eine Blade-Datei. Gibt den vollen Dateipfad zurück. |
createTemplateFromBlocks(array $blocks, string $filename): string |
Erzeugt eine Blade-Datei aus mehreren Blöcken. Jeder Block: ['html' => ?, 'css' => ?, 'js' => ?]. Gibt den vollen Dateipfad zurück. |
Dateiname: Nur Zeichen a-zA-Z0-9_- werden übernommen; ungültige Zeichen werden entfernt. Leerer Name wird zu template.
// Ein Block von der API → Blade $path = $client->createTemplateFromBlockId(7, 'hero-page'); // → z. B. .../resources/views/pages/hero-page.blade.php // Mehrere Blöcke (z. B. aus API geholt) $path = $client->createTemplateFromBlocks([ ['html' => '...', 'css' => '...', 'js' => '...'], ['html' => '...', 'css' => null, 'js' => null], ], 'landing-page');
TemplateWriter und ApiClient
| Methode | Beschreibung |
|---|---|
getTemplateWriter(): TemplateWriter |
Instanz für Views-Pfad und Verzeichnis-Erstellung. |
getApiClient(): ApiClient |
Low-Level API-Client. |
$writer = $client->getTemplateWriter(); $writer->getViewsPath(); // z. B. .../resources/views/pages $writer->ensureViewsDirectoryExists();
Artisan-Befehle
| Befehl | Beschreibung |
|---|---|
php artisan code-block:categories |
Listet alle Kategorien (ID, Name, Description) aus der Template-Archive-API. |
php artisan code-block:blocks |
Listet alle Code-Blöcke (ID, Title, Category, Preview-Pfad). |
php artisan code-block:blocks --category=1 |
Nur Blöcke der Kategorie mit ID 1. |
php artisan code-block:blocks --with-urls |
Zusätzlich Spalte „Preview URL“ (volle URLs). |
php artisan code-block:pull {block_id} {filename} |
Holt Block von der API und erzeugt resources/views/{views_path}/{filename}.blade.php. |
Beispiele:
php artisan code-block:categories php artisan code-block:blocks --category=1 --with-urls php artisan code-block:pull 7 hero-page
Routen
Template-Anzeige (gebaute Templates im Browser)
Aktivierung: CODE_BLOCK_TEMPLATE_ROUTE_ENABLED=true (Standard).
- URL:
GET /{prefix}/{name}prefix=CODE_BLOCK_TEMPLATE_ROUTE_PREFIXoder, wenn leer,TEMPLATE_ARCHIVE_VIEWS_PATH(z. B.pages).name= Dateiname ohne.blade.php(nura-z0-9_-).
- Beispiel:
GET /pages/hero-pagerendert die Viewpages.hero-page. - Route-Name:
code-block.template.show- Beispiel:
route('code-block.template.show', 'hero-page').
- Beispiel:
Die View erhält ['title' => ...] (aus dem Dateinamen abgeleitet). Existiert die View nicht, wird 404 zurückgegeben.
Deaktivieren: CODE_BLOCK_TEMPLATE_ROUTE_ENABLED=false.
Middleware: In config/code-block.php unter route.middleware setzen (z. B. ['web'], ['auth']).
Template-Builder (Seite + API)
Builder-Seiten-Route
Aktivierung: CODE_BLOCK_BUILDER_ROUTE_ENABLED=true (Standard).
- URL:
GET /builder(oder Wert vonCODE_BLOCK_BUILDER_ROUTE_PATH). - Route-Name:
code-block.builder.page- Beispiel:
route('code-block.builder.page').
- Beispiel:
- Inhalt: Blade-View
code-block::builder-pagemit Komponente<x-code-block::builder />, Tailwind v4 und Alpine.js (sofern nichtomit_cdn), plustemplate-builder.jsvon der Builder-Asset-Route.
Deaktivieren: CODE_BLOCK_BUILDER_ROUTE_ENABLED=false. Die Builder-API-Routen bleiben davon unberührt.
Builder nur als Komponente (ohne eigene Route)
Auf einer beliebigen Route/Seite: <x-code-block::builder /> einbinden. Im Layout CSRF-Meta-Tag setzen: <meta name="csrf-token" content="{{ csrf_token() }}">. Die API-URLs werden von der Komponente per Route-Namen gesetzt.
Builder-API (für Alpine.js / Frontend)
Alle unter dem Prefix CODE_BLOCK_BUILDER_API_PREFIX (Standard: code-block-builder), Middleware: builder.middleware (Standard: ['web']).
| Methode | URL | Beschreibung |
|---|---|---|
| GET | /{api_prefix}/categories |
Kategorien von der Template-Archive-API. |
| GET | /{api_prefix}/blocks?category_id={id} |
Code-Blöcke (mit preview_image_url). |
| POST | /{api_prefix}/templates |
Template speichern. Body: { "name": "hero-page", "block_ids": [1, 2, 3] }. |
| GET | /{api_prefix}/assets/template-builder.js |
Liefert template-builder.js aus dem Package. |
POST /templates – Validierung:
name: erforderlich, 1–255 Zeichen, nura-z0-9_-(Regex:^[a-z0-9_-]+$).block_ids: Array, mindestens ein Element; jedes Element Integer ≥ 1.
Antwort bei Erfolg: { "path": "...", "message": "..." }. Bei Fehler: 502 mit { "message": "..." }.
Erzeugte Blade-Dateien
- Speicherort:
resources/views/{views_path}/{filename}.blade.php(z. B.resources/views/pages/hero-page.blade.php). - Inhalt: Eigenständiges HTML-Dokument mit DOCTYPE,
<head>, Tailwind v4 (CDN), optional<style>und<script>. HTML/CSS/JS der Blöcke steht in@verbatim, damit{{ }}und@in den Blöcken nicht von Blade interpretiert werden. - Title:
@yield('title', config('app.name')).
API-Cache
- Aktivierung:
config('code-block.api_cache_enabled')(Standard:true). - TTL:
config('code-block.api_cache_ttl_minutes')(Standard:30). Bei 0 oder wenn Cache deaktiviert ist, wird nicht gecacht. - Gecacht werden:
getCodeBlocks(pro Kategorie und „all“),getCodeBlock,getCodeCategories,getCodeCategory. - Cache-Key-Präfix:
componist.code_block.api. Beiapp.debugtrue wird ein Cache-Hit ins Log geschrieben.
Lizenz
MIT
componist/code-block 适用场景与选型建议
componist/code-block 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 02 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「css」 「JS」 「html」 「templates」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 componist/code-block 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 componist/code-block 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 componist/code-block 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Texy converts plain text in easy to read Texy syntax into structurally valid (X)HTML. It supports adding of images, links, nested lists, tables and has full support for CSS. Texy supports hyphenation of long words (which reflects language rules), clickable emails and URL (emails are obfuscated again
A Twig extension to insert css as inline styles with a tag
Caching and compression for Twig assets (JavaScript and CSS).
A PSR-7 compatible library for making CRUD API endpoints
HTML and form generation
Define your own css rule-sets for the TYPO3 CMS backend.
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 45
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-04