我如何在没有 symfony 的项目中重用我的 symfony 实体
Posted
技术标签:
【中文标题】我如何在没有 symfony 的项目中重用我的 symfony 实体【英文标题】:How can i reuse my symfony entities in a no symfony project 【发布时间】:2014-06-17 15:59:07 【问题描述】:我在 symfony 项目中有一些实体,我想在另一个不是用 symfony 编写的 php 项目中重用它们。我不能重写这个项目,因为它太大了。
有没有办法将我的实体及其存储库包含在非 symfony 项目中?
感谢您的回答
【问题讨论】:
你的其他项目是否使用了学说? 这取决于您的存储库代码如何依赖于 Symfony 组件。如果您没有向您的存储库注入任何服务,那么您可以在 Symfony 之外安全地使用您的实体。您仍然需要使用 ORM(即 Doctrine)。 【参考方案1】:如果有人感兴趣,我已经找到了在 Symfony 之外使用实体和存储库的解决方案
例如,我在 /path 中安装了一个新的 Symfony,并创建了一个简单的实体“Testeur”
<?php
// Import
require_once $_SERVER['DOCUMENT_ROOT'].'/path/vendor/autoload.php';
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Acme\DemoBundle\Entity\Testeur;
$paths = array("/path/src/Acme/DemoBundle/Entity/");
$isDevMode = true;
// the connection configuration
$dbParams = array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => 'root',
'dbname' => 'test_sf',
);
// Creation of the entity manager
$config = Setup::createConfiguration($isDevMode);
$driver = new AnnotationDriver(new AnnotationReader(), $paths);
AnnotationRegistry::registerLoader('class_exists'); // registering noop annotation autoloader - allow all annotations by default
$config->setMetadataDriverImpl($driver);
$entityManager = EntityManager::create($dbParams, $config);
// Creation of the repository of my Testeur entity
$metadata = $entityManager->getClassMetadata('Acme\DemoBundle\Entity\Testeur');
$repositoryClassName = $metadata->customRepositoryClassName;
if ($repositoryClassName === null)
$configuration = $entityManager->getConfiguration();
$repositoryClassName = $configuration->getDefaultRepositoryClassName();
/** @var \Acme\DemoBundle\Entity\TesteurRepository $tR */
$repo = new $repositoryClassName($entityManager, $metadata);
// Example insertion
$obj = new Testeur();
$obj->setLib('First object');
$obj->setDescription('This is my first object');
$obj->setSort(1);
$obj->setVisible(true);
$entityManager->persist($obj);
$entityManager->flush();
// Get an objet by the repo
$o = $repo->find(17);
echo "<pre>".print_r($o, true)."</pre>";
所以现在,通过这个解决方案,我可以将我的实体用于一个不是用 symfony 制作的巨大(糟糕)项目
【讨论】:
以上是关于我如何在没有 symfony 的项目中重用我的 symfony 实体的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Symfony (Twig) 中包含可重用的小部件?