Unique Keys

There are several cases where you may want to generate a unique key. For example:

  • populate ID attribute in your HTML output
  • key for partial cache

This can be done simply by including following code in your template:

$DataObject.UniqueKey

getUniqueKey method is available on DataObject so you can use it on many object types like pages and blocks.

Customisation

The unique key generation can be altered in two ways:

  • you can provide extra data to be used when generating a key via an extension
  • you can inject over the key generation service and write your own custom code

Extension point

cacheKeyComponent extension point is located in DataObject::getUniqueKeyComponents. Use standard extension flow to define the cacheKeyComponent method on your extension which is expected to return a string. This value will be used when unique key is generated. Common cases are:

  • versions - object in different version stages needs to have different unique keys
  • locales - object in different locales needs to have different unique keys

Custom service

UniqueKeyService is used by default but you can use injector to override it with your custom service. For example:

SilverStripe\Core\Injector\Injector:
  SilverStripe\ORM\UniqueKey\UniqueKeyService:
    class: App\Service\MyCustomService

Your custom service has to implement UniqueKeyInterface.