如何有效地将数据从我的控制器传递到存储库 Symfony

How to effectively pass data from my controller to repository, Symfony

我正在开发一个使用

的 Symfony 项目

我在其中声明并创建了查询生成器实例的存储库文件

(存储库 1)

$mk = $this->createQueryBuilder('up');

        $later = date("Y-m-d", strtotime("-3 months"));
        $today = date("Y-m-d");
        
        $mk->andWhere('up.period BETWEEN :start AND :end');
        $mk->setParameter('start', $later);
        $mk->setParameter('end', $today);

        return $mk->getQuery()->getResult();

这会在上述日期之间自动为我的页面生成数据。

现在我想创建一个可以在两个日期之间进行搜索的表单。

目的是将 posted 数据从这个表单传递到我的控制器到我下面的方法中

下面是我的控制器(controller1)

    protected function getData(EntityManagerInterface $entityManager,Request $request) {
    
    // this code to get data from repository
    $entityManager->getRepository(repository1::class)->getName()

// receive posted data
 $date1 = $request->get('date');
 $date2 = $request->get('date');

    // now how to pass data to my repository1
    
    }

请问如何编辑我必须的 post 数据从我的控制器到我的 (repository1)

那么就是

  $mk = $this->createQueryBuilder('up');
    
            $later = $date1;
            $today = $date2;
            
            $mk->andWhere('up.period BETWEEN :start AND :end');
            $mk->setParameter('start', $later);
            $mk->setParameter('end', $today);
    
            return $mk->getQuery()->getResult();

这有可能吗,还是我想多了?

存储库Class

public function getByStartEndDate(DateTimeInterface $start, DateTimeInterface $end)
{
  return $this->createQueryBuilder('up')
    ->andWhere('up.period BETWEEN :start AND :end')
    ->setParameter('start', $start)
    ->setParameter('end', $end)
    ->getQuery()
    ->getResult()
  ;
}

控制器Class

private function getData(Request $request, RepositoryClass $repo)
{
  // May need to convert these to DateTime objects
  $start = $request->get('start');
  $end = $request->get('end');

  $records = $repo->getByStartEndDate($start, $end);

  // do what you want with the records here
}

您可以将日期作为参数提供给您的方法。

控制器Class:

protected function getData(EntityManagerInterface $entityManager,Request $request) {

    $start = $request->get('start') ? new \DateTime($request->get('start')) : null;
    $end = $request->get('end') ? new \DateTime($request->get('end')) : null;
    $result = $entityManager->getRepository(Entity::class)->getName($start, $end);

    // do with result as desired
}

存储库Class:

public function getName(\DateTimeInterface $start, \DateTimeInterface $end)
{
    return $this->createQueryBuilder('up')
                ->andWhere('up.period BETWEEN :start AND :end')
                ->setParameter('start', $start)
                ->setParameter('end', $end)
                ->getQuery()
                ->getResult()
    ;
}