{"id":20816685,"url":"https://github.com/webuni/front-matter","last_synced_at":"2025-04-05T03:09:56.839Z","repository":{"id":34097777,"uuid":"37923384","full_name":"webuni/front-matter","owner":"webuni","description":"The most featured front matter (yaml, json, neon, toml) parser and dumper for PHP.","archived":false,"fork":false,"pushed_at":"2025-01-04T22:24:52.000Z","size":117,"stargazers_count":35,"open_issues_count":0,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T02:06:24.728Z","etag":null,"topics":["commonmark","front-matter","json","markdown","neon","php","toml","twig","yaml"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"LambdaSchool/Sprint-Challenge-Applied-Javascript","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webuni.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-06-23T14:19:27.000Z","updated_at":"2025-01-04T22:24:55.000Z","dependencies_parsed_at":"2025-02-07T12:08:16.362Z","dependency_job_id":"d4891e7f-ce42-4580-b70f-77cd713c99bc","html_url":"https://github.com/webuni/front-matter","commit_stats":{"total_commits":53,"total_committers":4,"mean_commits":13.25,"dds":0.09433962264150941,"last_synced_commit":"bbe3a14c01a73232a0e8bad9b96db70448bf5ca9"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webuni%2Ffront-matter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webuni%2Ffront-matter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webuni%2Ffront-matter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webuni%2Ffront-matter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webuni","download_url":"https://codeload.github.com/webuni/front-matter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247280272,"owners_count":20912967,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["commonmark","front-matter","json","markdown","neon","php","toml","twig","yaml"],"created_at":"2024-11-17T21:36:11.882Z","updated_at":"2025-04-05T03:09:56.825Z","avatar_url":"https://github.com/webuni.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Front Matter\n============\n\n[![Packagist](https://img.shields.io/packagist/v/webuni/front-matter.svg?style=flat-square)](https://packagist.org/packages/webuni/front-matter)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=webuni_front-matter\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=webuni_front-matter)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=webuni_front-matter\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=webuni_front-matter)\n\nThe most universal Front matter (yaml, json, neon, toml) parser and dumper for PHP.\nFront matter allows page-specific variables to be included at the top of a page.\n\nInstallation\n------------\n\nThis library can be installed via Composer:\n\n    composer require webuni/front-matter\n\nUsage\n-----\n\n### Automatic front matter detection and parsing\n\nThis library can parse all form of front matter:\n\n\u003ctable\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth\u003eYAML (Neon)\u003c/th\u003e\u003cth\u003eTOML\u003c/th\u003e\u003cth\u003eTwig\u003c/th\u003e\u003cth\u003ePug\u003c/th\u003e\u003cth\u003eJson\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\n\n```markdown\n---\nfoo: bar\n---\n\n# Section\n\nText\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```markdown\n+++\nfoo = bar\n+++\n\n# Section\n\nText\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```markdown\n{#---\nfoo: bar\n---#}\n\n\u003ch1\u003eSection\u003c/h1\u003e\n\n\u003cp\u003e{{ foo }}\u003c/p\u003e\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```markdown\n--\n  foo: bar\n\nh1 Section\n\np= foo\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n```markdown\n{\n  \"foo\": \"bar\"\n}\n\n# Section\n\nText\n```\n\n\u003c/td\u003e\n\u003c/tr\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\nThe following code will automatically detect the above front matter types:\n\n```php\n\u003c?php\n\n$frontMatter = \\Webuni\\FrontMatter\\FrontMatterChain::create();\n$document = $frontMatter-\u003eparse($string);\n\n$data = $document-\u003egetData();\n$content = $document-\u003egetContent();\n```\n\n### Parse an arbitrary string\n\n```php\n\u003c?php\n\n$frontMatter = new \\Webuni\\FrontMatter\\FrontMatter();\n\n$document = $frontMatter-\u003eparse($string);\n\n$data = $document-\u003egetData();\n$content = $document-\u003egetContent();\n```\n\n### Check if a string has front matter\n\n```php\n\u003c?php\n\n$frontMatter = new \\Webuni\\FrontMatter\\FrontMatter();\n\n$hasFrontMatter = $frontMatter-\u003eexists($string);\n```\n\n### Twig loader\n\nIf you want to store metadata about twig template, e.g.:\n\n```twig\n{#---\ntitle: Hello world\nmenu: main\nweight: 20\n---#}\n{% extend layout.html.twig %}\n{% block content %}\nHello world!\n{% endblock %}\n```\n\nyou can use `FrontMatterLoader`, that decorates another Twig loader:\n\n```php\n$frontMatter = \\Webuni\\FrontMatter\\Twig\\TwigCommentFrontMatter::create();\n$loader = new \\Twig\\Loader\\FilesystemLoader(['path/to/templates']);\n$loader = new \\Webuni\\FrontMatter\\Twig\\FrontMatterLoader($frontMatter, $loader);\n\n$twig = new \\Twig\\Environment($loader);\n$content = $twig-\u003erender('template', []);\n// rendered the valid twig template without front matter\n```\n\nIt is possible to inject front matter to Twig template as variables:\n\n```php\n// …\n$converter = \\Webuni\\FrontMatter\\Twig\\DataToTwigConvertor::vars();\n$loader = new \\Webuni\\FrontMatter\\Twig\\FrontMatterLoader($frontMatter, $loader, $converter);\n// …\n```\n\nLoaded Twig template has this code:\n\n```twig\n{% set title = \"Hello world\" %}\n{% set menu = \"main\" %}\n{% set weight = 20 %}\n{% line 5 %}\n{% extend layout.html.twig %}\n{% block content %}\nHello world!\n{% endblock %}\n```\n\nAvailable converters:\n\n| Converter                                 | Twig                                                       |\n| ----------------------------------------- |------------------------------------------------------------|\n| `DataToTwigConvertor::nothing()`          |                                                            |\n| `DataToTwigConvertor::vars()`             | `{% set key1 = value1 %}`                                  |\n| `DataToTwigConvertor::vars(false)`        | `{% set key1 = key1 is defined ? key1 : value1 %}`         |\n| `DataToTwigConvertor::var('name')`        | `{% set name = {key1: value1, key2: value2} %}`            |\n| `DataToTwigConvertor::var('name', false)` | `{% set name = name is defined ? name : {key1: value1} %}` |\n\n### Markdown\n\nThe most commonly used front matter is for markdown files:\n\n```markdown\n---\nlayout: post\ntitle: I Love Markdown\ntags:\n  - test\n  - example\n---\n\n# Hello World!\n```\n\nThis library can be used with [league/commonmark](https://commonmark.thephpleague.com/):\n\n```php\n$frontMatter = new \\Webuni\\FrontMatter\\FrontMatter();\n$extension = new \\Webuni\\FrontMatter\\Markdown\\FrontMatterLeagueCommonMarkExtension($frontMatter);\n\n$converter = new \\League\\CommonMark\\CommonMarkConverter([]);\n$converter-\u003egetEnvironment()-\u003eaddExtension($extension);\n$html = $converter-\u003econvertToHtml('markdown'); // html without front matter\n```\n\nAlternatives\n------------\n\n- https://github.com/spatie/yaml-front-matter\n- https://github.com/ergebnis/front-matter\n- https://github.com/mnapoli/FrontYAML\n- https://github.com/Modularr/YAML-FrontMatter\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebuni%2Ffront-matter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebuni%2Ffront-matter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebuni%2Ffront-matter/lists"}