如何隐藏今天发生的和已经过去的事件?Symfony

mwg9r5ms  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(108)

在我的Symfony项目中,我创建了一个名为start的表“event”和datatime字段。在twig中,我希望过滤和显示即将发生的事件。这样已经过去的事件就可以看到了。
目前,我使用{% if event.start > date() %}。它可以隐藏几天前发生的事件。我也想隐藏今天已经发生的事件,但目前它不工作,当今天的事件的时间已经过去。
如何隐藏时间已过的事件?

jbose2ul

jbose2ul1#

最好在存储库中创建一个函数,然后在控制器中调用它,而不使用findAll和hide事件。

// EventRepository
public function eventsList()
{
    return $this->createQueryBuilder('e')
        ->andWhere('e.date >= :today')
        ->setParameter('today', new \DateTime())
        ->orderBy('e.id', 'DESC')
        ->getQuery()
        ->getResult()
    ;
}
tzdcorbm

tzdcorbm2#

解决方案如下:

  • 确保该字段为日期时间。
  • 使用{% if event.start > 'now' %},它将考虑(今天的)日期和(当前的)时间。
nkoocmlb

nkoocmlb3#

这里有一个更好的解决方案(我精确地说,地址是给事件,地址有一个“bigcity”注册,这就是为什么我使用LocationRepository):
EventController.php

#[Route('/events', name: 'events')]
    public function events(
        Request $request, 
        EventRepository $eventRepository, 
        CategoryRepository $categoryRepository,
        BigCityRepository $bigcityRepository,
        LocationRepository $locationRepository
    ){
        $category = $categoryRepository->findOneById($request->query->get('category'));
        $bigcity = $bigcityRepository->findOneById($request->query->get('bigcity'));
        $location = $locationRepository->findAll($request->query->get('location.bigcity'));

        $events = $eventRepository->findBy(['category' => $category, 'address' => $location]);
        return $this->render("front/events.html.twig", [
            'events' => $events,
            'category' => $category,
            'bigcity' => $bigcity
        ]);
    }

相关问题