Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何有效地将数据从我的控制器传递到存储库Symfony_Php_Symfony - Fatal编程技术网

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

Php 如何有效地将数据从我的控制器传递到存储库Symfony,php,symfony,Php,Symfony,我正在做一个Symfony项目,它利用了 我在其中声明并创建了查询生成器实例的存储库文件 (报告1) 在上述日期之间自动为我的页面生成数据 现在我想创建一个表单,在其中我可以在两个日期之间进行搜索 目的是将此表单中发布的数据传递给我的控制器,并将其传递到我下面的方法中 下面是我的控制器(控制器1) 请问如何编辑我必须将控制器内的数据发布到我的(repository1)中的内容 那就是 $mk = $this->createQueryBuilder('up');

我正在做一个Symfony项目,它利用了

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

(报告1)

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

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

目的是将此表单中发布的数据传递给我的控制器,并将其传递到我下面的方法中

下面是我的控制器(控制器1)

请问如何编辑我必须将控制器内的数据发布到我的(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();
这是可能的,还是我想得太多了?

RepositoryClass

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()
  ;
}
控制器类

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
}

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

控制器类:

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
}
存储库类:

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()
    ;
}

对于您的问题,将它们作为参数添加到
repository1::getName($date1=null,$date2=null)
然后添加参数为
null
时的条件以设置默认值。但是,我强烈建议使用。然后,您可以将依赖项注入与调用一起使用($date1,$date2)从查询生成器中检索所需的数据。您试图解决什么问题,具体是什么问题?您是否需要检查该请求是post请求还是使用单独的路由?如果您使用Symfony,我相信向方法添加参数对您来说是件小事。欢迎使用
->get('start')
$start
$end
不是DateTimeInterface实例。是的,我在控制器类中的内联注释中提到了这一点是的,但您在
->get('start')
:-)中仍然有一个输入错误。您是否意识到您的开始和结束分配中有一个输入错误?我猜你在这两个方面都是人类:)
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
}
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()
    ;
}