如何在现有项目的控制器中使用 symfony、twig 和 doctrine

How to use symfony, twig, and doctrine in a controller inside an existing project

我一直在 Symfony 4 上使用 SymfonyCast 来尝试帮助我连接各个部分。我学到了很多关于 Symfony 和 twig 的教义以及它们应该一起工作的环境。但是,这不是我必须建立的基础。我需要在现有项目 OpenEMR 中构建。

我在这里发布了我的项目代码:

https://github.com/juggernautsei/symfony_twig_doctrine_component/blob/master/library/financialreports/src/FinancialSummaryByInsuranceController.php

控制器正在加载树枝模板。现在,我试图用数据库中的数据填充控制器。我已经构建了实体 class 和存储库 class。我只是不知道该在这一行中放什么。

     public function getpaidata($insurerid)
      {
         $payments = $this->repository
     }

访问存储库中的 class。 IDE 建议存储库 class 中的代码。

public function getInsurerPaid(ArSession $insurerId)
{
    /*$insurerPaid = $this->_em->getRepository($this->_entityName)->findBy([
        "payer_id" => $insurerId
    ]);*/
    $insurerPaid = $this->findBy([
        'payer_id' => $insurerId
    ]);
    return $insurerPaid;
}

但是当我在控制器中输入代码时,IDE PHPStorm 没有给出任何建议。所以,我被困住了。我在这里尝试了建议的代码

https://symfony.com/doc/2.0/book/doctrine.html#creating-an-entity-class https://symfonycasts.com/screencast/symfony-doctrine/repository

但没有告诉我如何访问存储库 class 中的方法。

更新:

getpaiddata() 方法现已更改为

/**
 * @return Fully hydrated object.
 */
public function getpaidata($insurerid)
{
    $row = $this->repository->findBy([
        "payer_id" => $insurerid
    ]);

    return $row;
}

问题很可能是您如何获得 $this->repository。如果您通过实体管理器获取它,通过 $this->_em->getRepository($entityName) 就像在注释片段中一样,return 值有一个类型提示告诉 IDE 它只是一个通用的 EntityRepository 而不是你的自定义存储库 class.

您可以将 Symfony 插件安装到 PhpStorm,如果您的实体具有正确的注释,这将为您提供更好的自动完成功能 @Entity(repositoryClass="...")

在典型的 Symfony 4 应用程序中,您也可以只注入正确的存储库,而不是 EntityManager,例如在你的构造函数中:

public function __construct(PaidDataRepository $repository)
{
    $this->repository = $repository;
}

从外观上看,OpenEMR 有自己的使用 Connector::instance() 创建 EntityManager 的方法。不幸的是,这可能不会很容易地为你工作。

另一种解决方法是在分配变量的上方放置一个类型提示:

/** @var App\Repository\PaidDataRepository $repository */
$repository = $this->_em->getRepository(PaidData::class)

或者,因为你有一个 class 变量,你可以在上面放一个类似的注释。