Пример добавления для сущности комментария базового поля, содержащее юзерагент пользователя.
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+
Похожие записи
Добавить комментарий