Object \DateTime
biasanya digunakan untuk menandai tanggal atau waktu pada Doctrine.
Pada Doctrine terdapat beberapa tipe field yang menggunakan object \DateTime
antara lain date
, datetime
dan time
.
Secara default, Semart Skeleton tidak mengetahui apakah request yang dikirimkan berupa string
tanggal atau bukan, sehingga Developer perlu menanganinya secara khusus.
Untuk menghandle object \DateTime
pada Semart Skeleton sangatlah mudah, Developer cukup membuat event subscriber untuk event app.request
sebagai berikut:
<?php
declare(strict_types=1);
namespace KejawenLab\Semart\Skeleton\EventSubscriber;
use KejawenLab\Semart\Skeleton\Application;
use KejawenLab\Semart\Skeleton\Request\RequestEvent;
use KejawenLab\Semart\Skeleton\Entity\Event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @author Muhamad Surya Iksanudin <[email protected]>
*/
class DateTimeSubscriber implements EventSubscriberInterface
{
public function filterRequest(RequestEvent $event)
{
$request = $event->getRequest();
$object = $event->getObject();
if (!$object instanceof Event) {
return;
}
$object->setEventDate(\DateTime::createFromFormat('d-m-Y', $request->request->get('eventDate', '')));
$request->request->remove('eventDate');
}
public static function getSubscribedEvents()
{
return [
Application::REQUEST_EVENT => [['filterRequest']],
];
}
}
Cukup seperti di atas maka field eventDate
dapat diubah menjadi object \DateTime
dan kemudian dihapus dari object Request
agar Request Handler tidak lagi meng-handle field eventDate
tersebut.
Cara di atas dapat dipakai untuk kasus yang sama yang memerlukan manipulasi request.