Symfony: формат даты в сущности в зависимости от локализации

У меня есть следующий объект в моем проекте Symfony 4

class Post
{
/**
* @var string
*
* @ORM\Column(name="date_string", type="string", length=11)
*/
private $dateString;

public funtion getDateString()
{
return $this->dateString;
}
}

Я знаю, я мог бы использовать \ DateTime для этого, но это не имеет значения для моего случая;)

Что я хочу, чтобы преобразовать строку даты в зависимости от локализации пользователя. Поэтому я создал новый перевод и использовал ключ «dateFormat», чтобы установить формат даты для каждой локализации.

messages.en.yaml

dateFormat: "m/d/Y"
messages.de.yaml

dateFormat: "d.m.Y"

Мой вопрос: как лучше получить отформатированную строку даты? Я написал метод репозитория, но мне не нравится это решение. Когда я обращаюсь к методу, мне всегда нужно получить хранилище, и его неудобно использовать в шаблонах Twig.

PostRepository:

public function getFormattedDateString(Post $post): string
{
$dateTime = new \DateTime($post->getDateString());
$dateFormat = $this->translator->trans('dateFormat');

return $dateTime->format($dateFormat);
}

Скорее я хотел бы использовать метод непосредственно из сущности. Что-то вроде этого:

$ Post-> getFormattedDate ();

Но это не сработает, потому что мне нужно ввести TranslatorInterface в сущность. Это отстой. Или есть способ изменить результат метода getDateString ()? (аннотации?)

Как бы вы решили задачу? большое спасибо

0

Решение

Я полагаю, вы не хотите использовать IntlDateFormatter и хочу заново изобрести способ перевести дату.
Я бы сделал услугу LocaleDateFormatter чем вы можете использовать, когда вам нужно перевести дату в форматированный Дата локали (и фильтр ветки, чтобы использовать его в шаблоне ветки)

__construct(TranslatorInterface $translator)
{
$this->translator = $translator;
}

public function getFormattedDateString($dateString): string
{
$dateTime = new \DateTime(dateString);
$dateFormat = $this->translator->trans('dateFormat');

return $dateTime->format($dateFormat);
}
1

Другие решения

Может быть, вы могли бы создать сервис, который будет предоставлять функцию, которая будет принимать вашего пользователя в качестве параметра. Это разрешит нужную вам строку даты.

Например, вы можете создать DateFormatResolverInterface, что бы реализовать resolveFormat(User $user), Затем создайте RequestLocaleDateFormatResolver класс, который реализует интерфейс, и разрешить формат внутри resolveFormat() функция. Вы всегда можете изменить способ разрешения формата, создав new class тот implements the interface,

Затем используйте это всякий раз, когда вам нужно: $this->get('acme.date_format_resolver')->resolveFormat($user); ИЛИ ЖЕ
$this->get(DateFormatResolverInterface::class)->resolveFormat($user);

Надеюсь это поможет.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector