Пример добавления для сущности комментария базового поля, содержащее юзерагент пользователя.
1. Добавляем сущности comment новое базовое поле useragent:
// MODULENAME.module
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
/**
* Implements hook_entity_base_field_info().
*/
function MODULENAME_entity_base_field_info(EntityTypeInterface $entity_type): array {
$fields = [];
if ($entity_type->id() == 'comment') {
$fields['useragent'] = BaseFieldDefinition::create('string')->setLabel(t('Useragent'));
}
return $fields;
}
2. Добавляем в MODULENAME.install следующий код и выполняем vendor/bin/drush updb либо переустанавливаем модуль MODULENAME:
// MODULENAME.install
/**
* Implements hook_install().
*/
function MODULENAME_install(): void {
$field = BaseFieldDefinition::create('string')->setLabel(t('Useragent'));
\Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('useragent', 'comment', 'MODULENAME', $field);
}
/**
* Add comment useragent base field.
*/
function MODULENAME_update_8001(): void {
$field = BaseFieldDefinition::create('string')->setLabel(t('Useragent'));
\Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('useragent', 'comment', 'MODULENAME', $field);
}3. При добавлении сущности заполняем поле значением:
// MODULENAME.module
/**
* Implements hook_ENTITY_TYPE_presave(): comment.
*/
function MODULENAME_comment_presave(CommentInterface $comment): void {
if ($comment->isNew()) {
$useragent = \Drupal::request()->server->get('HTTP_USER_AGENT');
$comment->set('useragent', substr($useragent, 0, 255));
}
}
Profit. Получить сохранённый user agent можно с помощью $comment->get('useragent')->value
Написанное актуально для
Drupal 8+
Похожие записи
- Отличие методов BaseFieldDefinition::setDefaultValue() и BaseFieldDefinition::setInitialValue()
- Создание back/reverse reference computed field
- Создание вычисляемого поля сущности (computed field)
- Программное добавление сущностей
- Добавляем на страницу управления отображением комментария поля "автор" и "дата создания"
Добавить комментарий