Кастомизация
Профиль пользователя
Настройка маппинга полей и формата отображения имени, email и аватара пользователя
Frame использует UserFieldsMap для маппинга полей модели пользователя и форматирования отображаемых данных (имя, email, аватар). По умолчанию используется формат Имя Ф. — имя и первая буква фамилии.
Маппинг полей по умолчанию
UserFieldsMap ожидает следующие поля в модели пользователя:
name
?string
Имя пользователя.
surname
?string
Фамилия пользователя.
email
?string
Email пользователя.
avatar
?string
Аватар пользователя.
Если в вашей модели поля называются иначе, передайте нужные имена при создании:
app/Providers/FrameServiceProvider.php
use Frame\Core\Config\Config;
use Frame\Core\Config\UserFieldsMap;
/** @var Config $config */
$config = app(Config::class);
$config->userFieldsMap = new UserFieldsMap(
surname: 'last_name',
name: 'first_name',
email: 'user_email',
avatar: 'profile_image',
);
Кастомная логика отображения
Если нужно изменить не только маппинг полей, но и логику форматирования — создайте свой класс, наследующий UserFieldsMap или реализующий UserFieldsMapInterface.
Наследование UserFieldsMap
Переопределите только нужные методы. Например, чтобы изменить формат с Имя Ф. на Фамилия И.:
app/Frame/Config/CustomUserFieldsMap.php
namespace App\Frame\Config;
use ArrayAccess;
use Frame\Core\Config\UserFieldsMap;
class CustomUserFieldsMap extends UserFieldsMap
{
public function getTitleFor(ArrayAccess $record): string
{
return implode(' ', array_filter([
$record[$this->surname] ?? '',
empty($record[$this->name] ?? null)
? ''
: mb_substr((string) $record[$this->name], 0, 1) . '.',
]));
}
}
Подключите в FrameServiceProvider:
app/Providers/FrameServiceProvider.php
use App\Frame\Config\CustomUserFieldsMap;
use Frame\Core\Config\Config;
public function boot(): void
{
parent::boot();
/** @var Config $config */
$config = app(Config::class);
$config->userFieldsMap = new CustomUserFieldsMap();
}
Реализация UserFieldsMapInterface
Для полной замены логики реализуйте интерфейс напрямую:
app/Frame/Config/CustomUserFieldsMap.php
namespace App\Frame\Config;
use ArrayAccess;
use Frame\Core\Config\UserFieldsMapInterface;
class CustomUserFieldsMap implements UserFieldsMapInterface
{
public function getTitleFor(ArrayAccess $record): string
{
return ($record['last_name'] ?? '') . ' ' . ($record['first_name'] ?? '');
}
public function getEmail(ArrayAccess $record): string
{
return $record['email'] ?? '';
}
public function getAvatar(ArrayAccess $record): string
{
return $record['photo_url'] ?? '';
}
}
Методы интерфейса
getTitleFor
ArrayAccess $record → string
Отображаемое имя пользователя. Используется в навбаре и на страницах, где показывается текущий пользователь.
getEmail
ArrayAccess $record → string
Email пользователя.
getAvatar
ArrayAccess $record → string
URL аватара пользователя.