Новое в Symfony 6.3 — Улучшения Clock

Источник: «New in Symfony 6.3: Clock Improvements»
Symfony 6.3 представляет новый класс Clock и новый ClockAwareTrait; от также интегрирует компонент Clock в другие функции Symfony.

В Symfony 6.2 мы представили новый компонент Clock, чтобы вы могли отделить свои приложения от системных часов (например, для создания более чувствительных ко времени тестов). В Symfony 6.3 мы улучшили его новыми возможностями.

Добавлен класс Clock и функция now()

В Symfony 6.2 мы представили ClockInterface и три конкретные реализации: NativeClock, ClockMock и MonotonicClock. В Symfony 6.3 мы представляем новый класс Clock возвращающий текущее время и позволяющий использовать любую реализацию интерфейса, описанного в спецификации PSR-20: Clock, в качестве глобальных часов в вашем приложении:

use Symfony\Component\Clock\Clock;
use Symfony\Component\Clock\MockClock;

// Вы можете установить собственную реализацию часов или использовать NativeClock по умолчанию.
Clock::set(new MockClock());

// Затем вы можете получить экземпляр часов.
$clock = Clock::get();

// Отсюда вы можете получить текущее время
$now = $clock->now();

// А также отправить приложение в сон на заданное время
$clock->sleep(2.5);

Мы также добавили функцию now(), которую вы можете использовать в любом месте приложения для получения текущего времени:

use function Symfony\Component\Clock\now;

$now = now(); // возвращает экземпляр DateTimeImmutable

Теперь Symfony подключает эти глобальные часы как сервис, поэтому внедрение ClockInterface или использование now(), или Clock:get() возвращает одно и то же время.

Добавлен ClockAwareTrait

Благодаря ClockInterface вы можете обновлять свои чувствительные ко времени сервисы следующим образом:

class StoreSchedule
{
public function __construct(
// ...
+ private ClockInterface $clock
) {
}

public function isOpen(): bool
{
- $now = new \DateTimeImmutable();
+ $now = $this->clock->now();

return $this->openTime > $now && ...;
}
}

Однако для тех, кто предпочитает не внедрять новые зависимости в свои конструкторы сервисов, мы также добавили трейт, чтобы вам было проще его использовать:

class Store
{
+ use ClockAwareTrait;

public function __construct(
// ...
) {
}

public function isOpen(): bool
{
- $now = new \DateTimeImmutable();
+ $now = $this->now();

return $this->openTime > $now && ...;
}
}

Поддержка Clock в других компонентах

В Symfony 6.3 мы также продолжили интегрировать компонент Clock в другие функции Symfony, такие, как:

Дополнительные материалы

Предыдущая Статья

Как узнать какую версию Laravel вы используете

Следующая Статья

Vim: Что такое set hidden