mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-21 00:46:07 +02:00
7dc6b36c16
NEW Unique key for DataObject
49 lines
1.5 KiB
Markdown
49 lines
1.5 KiB
Markdown
---
|
|
title: Generating Unique Keys
|
|
summary: Outputting unique keys in templates.
|
|
icon: code
|
|
---
|
|
|
|
# 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:
|
|
|
|
```ss
|
|
$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:
|
|
|
|
```yaml
|
|
SilverStripe\Core\Injector\Injector:
|
|
SilverStripe\ORM\UniqueKey\UniqueKeyService:
|
|
class: App\Service\MyCustomService
|
|
```
|
|
|
|
Your custom service has to implement `UniqueKeyInterface`.
|