如何解决没有完整堆栈框架的 Symfony 组件第 2 集
在创建您自己的 PHP 框架 (https://symfony.com/doc/current/create_framework/index.html) 之后,我仅在我的项目中使用 Symfony DI、Http、Kernel、Routing 组件。 我指定的项目,@cerad 有很大帮助。再次感谢。 服务和控制器依赖注入没问题。
参见Symfony Components without the full stack framework(第 1 集) 和 https://github.com/Monnomcjo/symfony-simplex
但是现在我在依赖注入中实例化存储库遇到了新的困难。
我添加了 symfony/orm-pack 以使用 ServiceEntityRepository。
更新:
我的问题提得不好,上下文也不够清楚。仍然在学习环境中,我尝试实现清洁架构和领域驱动设计的概念。
在这种分区独立的思路下,我也尝试着更好地掌握我的Framework,几乎从零开始,边走边添加,只做我需要的。
仍然遵循评论,我不再使用 symfony / orm-pack 而是使用学说 / dbal。
还有很多事情要做,但它确实有效。
#container.PHP
// Doctrine
$containerBuilder->register(\ExampleApp\Domain\Client\Entity\ClientRepository::class,\Infrastructure\Persistence\Doctrine\Client\DoctrineClientRepository::class)
->setArguments([new Reference('service_container')]);
$containerBuilder->register(\ExampleApp\Domain\Client\UseCase\GetClient\GetClient::class,\ExampleApp\Domain\Client\UseCase\GetClient\GetClient::class)
->setArguments([new Reference(\ExampleApp\Domain\Client\Entity\ClientRepository::class)]);
$containerBuilder->register(\ExampleApp\Presentation\Client\GetClientHtmlPresenter::class,\ExampleApp\Presentation\Client\GetClientHtmlPresenter::class);
$containerBuilder->register(\Infrastructure\View\GetClientView::class,\Infrastructure\View\GetClientView::class);
$containerBuilder->register(\Infrastructure\Controller\ClientController::class,\Infrastructure\Controller\ClientController::class)
->setArguments([
new Reference(\ExampleApp\Domain\Client\UseCase\GetClient\GetClient::class),new Reference(\ExampleApp\Presentation\Client\GetClientHtmlPresenter::class),new Reference(\Infrastructure\View\GetClientView::class)
]);
现在可以退货了。
https://github.com/Monnomcjo/symfony-simplex 也更新了。
下一步,添加 .env,并将 conf 文件类型为 services.yaml
解决方法
由于您现在的问题是缺少 doctrine.orm.entity_manager
,我认为了解 Symfony 如何做到这一点的最佳方法是查看 DoctrineBundle。特别是在接收配置值的 DependencyInjection/DoctrineExtension.php 和 Configuration 处。您可能还想看看 service definitions。
Extension 类采用通过 Configuration 验证的配置(通常在您的 config/packages/doctrine.yaml 中),然后更新 Resources/config 下的服务定义。这种方法相当复杂,但它会帮助您了解 Symfony 中的事物是如何连接的。
或者,您可以查看 Doctrine Docs 以了解如何获取 EntityManager,然后将其转换为 Symfony 服务容器注册:
$isDevMode = true;
$proxyDir = null;
$cache = null;
$useSimpleAnnotationReader = false;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"),$isDevMode,$proxyDir,$cache,$useSimpleAnnotationReader);
// or if you prefer yaml or XML
//$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"),$isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"),$isDevMode);
// database configuration parameters
$conn = array(
'driver' => 'pdo_sqlite','path' => __DIR__ . '/db.sqlite',);
// obtaining the entity manager
$entityManager = EntityManager::create($conn,$config);
您可以在上面的服务定义链接中看到 EntityManager::create。你在你的应用程序中如何做到这一点很大程度上取决于你想要构建它与 Symfony 的接近程度,以及你想要围绕 Doctrine 配置什么以及如何配置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。