这是我的背景:
我有两个symfony REST API项目,我想在两个项目之间建立关系。每个项目都使用自己的数据库,实体和控制器。
从项目1(client-api),我需要访问项目2的实体(product-api)。 我曾尝试使用DoctrineRestDriver
首先,我配置了client-api项目的 config.yml 文件:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
memory: "%database_memory%"
path: "%database_path%"
charset: UTF8
product_api:
driver_class: "Circle\\DoctrineRestDriver\\Driver"
host: "http://localhost"
port: 8000
user:
password:
options:
authentication_class: "HttpAuthentication"
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AppBundle:
product_api:
connection: product_api
mappings:
AppBundle:
我想从product-api项目中读取一个国家/地区(id = 1),所以我在client-api项目上创建了这个控制器函数:
/**
* @Route("/countries", name="countries_other_api")
*/
public function getTheCountriesFromOtherApi()
{
$em = $this->getDoctrine()->getManager('product_api');
$country = $em->find("AppBundle\Entity\Country", 1);
}
但是我得到了恐怖:
Class'AppBundle \ Entity \ Pais'不存在
我的问题在哪里?如何从symfony项目1访问symfony项目2?
感谢。
答案 0 :(得分:0)
因此,您有2个服务。每个服务都对自己的实体负责。并且您希望service1可以直接访问service2的数据库...
我的意见是您尝试以错误的方式解决问题。如果要从service2获取实体,则应使用service2的REST API,因为您需要在service1中重新实现service2逻辑。
如何以更好的方式做到这一点?为service2创建RestApi Client库,并将其添加到service1 composer.json文件。不要忘记使用身份验证(硬编码的API密钥或JWT ...)。
因此,回答您的问题“哪里有问题?”我可以说问题出在您要实施的解决方案中。