如何在现有项目的控制器中使用 symfony、twig 和 doctrine
How to use symfony, twig, and doctrine in a controller inside an existing project
我一直在 Symfony 4 上使用 SymfonyCast 来尝试帮助我连接各个部分。我学到了很多关于 Symfony 和 twig 的教义以及它们应该一起工作的环境。但是,这不是我必须建立的基础。我需要在现有项目 OpenEMR 中构建。
我在这里发布了我的项目代码:
控制器正在加载树枝模板。现在,我试图用数据库中的数据填充控制器。我已经构建了实体 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 变量,你可以在上面放一个类似的注释。
我一直在 Symfony 4 上使用 SymfonyCast 来尝试帮助我连接各个部分。我学到了很多关于 Symfony 和 twig 的教义以及它们应该一起工作的环境。但是,这不是我必须建立的基础。我需要在现有项目 OpenEMR 中构建。
我在这里发布了我的项目代码:
控制器正在加载树枝模板。现在,我试图用数据库中的数据填充控制器。我已经构建了实体 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 变量,你可以在上面放一个类似的注释。