Поддержка
Кастомизация

Профиль пользователя

Настройка маппинга полей и формата отображения имени, 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 аватара пользователя.