Skip to content

Content bundle

Installation

bash
$ composer require enhavo/content-bundle
bash
$ yarn add @enhavo/content

Content model

Structured data

Structured data refers to information organized in a predefined format, making it easier for both computers and humans to store, search, and analyze. The structured data subsystem supports representing this information using the Schema.org standard.

With the StructuredDataManager and the getData function, you can get a normalized array in a json-ld schema.org format, that can easily passed to the frontend.

php
$article = $this->repository->find(1);
$structuredData = $this->structuredDataManager->getData($article);

The $structuredData array could look like this

php
[
    "@context": "http://schema.org"
    "@type" => "BlogPosting",
    "headline" => "Lorem ipsum",
    "datePublished" => "2025-01-01",
    "description" => "Lorem ipsum dolor sit amet, consetetur sadipscing elitr.",
]

To apply structured data, you have to use the StructuredData Attribute or use yaml to mark up your model.

php
namespace App\Entity;

use Enhavo\Bundle\ContentBundle\Attribute\StructuredData;

 #[StructuredData('blog_posting')]
class Article 
{
    #[StructuredData('blog_posting', ['property' => 'headline'])]
    private ?string $title;
    
    #[StructuredData('blog_posting', ['property' => 'description'])]
    private ?string $teaser;
}
yaml
enhavo_content:
    structured_data:
        App\Entity\Article:
            class:
                blog_posting:
                    type: blog_posting
            properties:
                title:
                    blog_posting:
                        type: blog_posting
                        property: headline
                teaser:
                    blog_posting:
                        type: blog_posting
                        property: teaser

To convert objects into plain text or modify your data, you can use a transformer.

php
#[StructuredData('blog_posting', [
    'property' => 'image',
    'transform' => 'media_url'
])]
private FileInterface $image;
yaml
properties:
    image:
        blog_posting:
            type: blog_posting
            property: image
            transform: media_url

Find more examples in the Structured Data guide or check the references:

Sitemap

Video