Skip to content

Commit

Permalink
Add reference bundle documentation (sulu#795)
Browse files Browse the repository at this point in the history
* Add reference bundle docs

* Add review suggestion

* Add review suggestion
  • Loading branch information
Prokyonn authored and pcescon committed Jul 31, 2024
1 parent 1b0639d commit 28c2d0d
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 0 deletions.
1 change: 1 addition & 0 deletions bundles/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ documented the most important ones.
page/index
persistence
preview/index
reference
route/index
search
security/index
Expand Down
68 changes: 68 additions & 0 deletions bundles/reference.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
ReferenceBundle
===============

The ReferenceBundle is tasked with tracking references among entities within the application.
It enables developers and maintainers to quickly determine the relationships between entities and understand the manner
and location in which an entity is utilized. Presently, the ReferenceBundle is capable of monitoring the usage of Snippets and
Media within PHPCR entities such as `pages` and `snippets`. These references are managed distinctly for the draft
state within the `admin context` and the live state within the `website context`.

|
The main reason we need this bundle is that, unlike traditional database references, our content management system
operates on an unstructured data model. Therefore, we cannot rely solely on database references, which are usually preferred.
It is essential to note that the ReferenceBundle should only be used for unstructured data, where database relations are
not feasible.

|
Content maintainers are able to see the references to a specific entity in the `Insights` tab of an entity like `Snippet`.

.. figure:: ../img/snippet-insights.png
:alt: Snippet References

Snippet References

Refresh references
------------------

The references are automatically updated upon saving an entity. You also have the option to manually update the
references by executing the `bin/console sulu:references:refresh` command. This command optionally accepts the
<resource-key> argument. When this argument is provided, only the references for the specified resource key will be refreshed.

.. code-block:: bash
bin/console sulu:references:refresh <resource-key>
.. note::

Please note that references are only refreshed for the current context. To refresh the references for both the
admin and website contexts, you will need to execute the command twice via the `bin/adminconsole` and the `bin/websiteconsole`.

Integrating references for custom content-types
-----------------------------------------------

To integrate the ReferenceBundle for custom content-types, you need to implement the `ReferenceContentTypeInterface` in your
content-type class. The interface requires you to implement the `getReferences` method. The method already receives the
`ReferenceCollector` which you can use to add references to the collector.

|
Example implementation for a custom content-type:

.. code-block:: php
public function getReferences(PropertyInterface $property, ReferenceCollectorInterface $referenceCollector, string $propertyPrefix = ''): void
{
$data = $property->getValue();
if (!\is_array($data) || !isset($data['id'])) {
return;
}
$referenceCollector->addReference(
CustomEntity::RESOURCE_KEY,
(string) $data['id'],
$propertyPrefix . $property->getName()
);
}
Binary file added img/snippet-insights.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 28c2d0d

Please sign in to comment.