Как я могу повторно использовать мои объекты symfony в проекте без symfony

#symfony

#symfony

Вопрос:

У меня есть некоторые объекты в проекте symfony, которые я хочу повторно использовать в другом php-проекте, который не написан с помощью symfony. Я не могу переписать этот проект, потому что он слишком огромен.

Есть ли способ включить мои объекты и их репозитории в проект без symfony?

Спасибо за ваши ответы

Комментарии:

1. использует ли ваш другой проект doctrine?

2. Это зависит от того, как код вашего репозитория зависит от компонентов Symfony. Если вы не вводили никаких сервисов в свои репозитории, вы можете безопасно использовать свои объекты вне Symfony. Вам все равно нужно использовать ORM (т. Е. Doctrine).

Ответ №1:

Если кому-то интересно, я нашел решение для использования объектов и репозиториев вне Symfony

Для примера я установил новый Symfony в /path и создал простую сущность «Testeur»

 <?php
// Import
require_once $_SERVER['DOCUMENT_ROOT'].'/path/vendor/autoload.php';
use DoctrineORMToolsSetup;
use DoctrineORMEntityManager;
use DoctrineORMMappingDriverAnnotationDriver;
use DoctrineCommonAnnotationsAnnotationReader;
use DoctrineCommonAnnotationsAnnotationRegistry;
use AcmeDemoBundleEntityTesteur;


$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('AcmeDemoBundleEntityTesteur');
$repositoryClassName = $metadata->customRepositoryClassName;
if ($repositoryClassName === null) {
    $configuration       = $entityManager->getConfiguration();
    $repositoryClassName = $configuration->getDefaultRepositoryClassName();
}
/** @var AcmeDemoBundleEntityTesteurRepository $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