当前位置: 首页 > 知识库问答 >
问题:

Symfony创建教义ORM服务

蔺敏达
2023-03-14

为了便于学习,我正在用symfony3编写一个非常简单的API。我正在努力报道服务领域。

我有一个存储库,我想注入教义ORM,这样做,我试图在我的services.xml文件中创建教义ORM服务。

Services.xml:

    <service
            id="orm.doctrine.service"
            class="Book\BookBundle\DoctrineORM\DoctrineRepo">
        <argument type="service" id="doctrine.orm.entity_manager" />
    </service>

    <service
            id="book.repo.create_book_repository"
            class="Book\BookBundle\Repositories\CreateBookRepository">
        <argument type="service" id="orm.doctrine.service" />
    </service>

学说是一个安装了作曲家的供应商库,因此我的捆绑包中没有它的类。相反,我试图引用它。

理论回购:

<?php

namespace Book\BookBundle\DoctrineORM;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DoctrineRepo extends Controller
{

    private $db;

    public function initDoctrine()
    {
        $this->db = $this->get('doctrine.orm.entity_manager');
        return $this->db;
    }

}

CreateBookRepository:

<?php

名称空间Book\BookBundle\Repositories;

使用Book\BookBundle\Entity\BookEntity;使用Book\BookBundle\DoctrineORM\DoctrineRepo;

类CreateBookRepository{

private $db;

public function __construct(
    DoctrineRepo $doctrineRepository
) {
    $this->db = $doctrineRepository;
}

public function createRepository()
{

    $product = new BookEntity();
    $product->setTitle('Test Title');
    $product->setAuthor('Leps');
    $product->setReleaseDate(new \DateTime);
    $product->setGender('Scfi');
    $product->setDescription('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
        mollit anim id est laborum.');


    $em = $this->db->initDoctrine()->getDoctrine()->getManager();

    $em->persist($product);
    $em->flush();

}

我错过了什么还是不明白...?

共有2个答案

柴翰藻
2023-03-14

首先,让我们配置我们的服务:

#../services.xml

<service id="book.manager" class="Book\BookBundle\Manager\BookManager">
    <argument type="service" id="doctrine.orm.entity_manager" />
</service>

第二,创建服务(BookManager)

namespace Book\BookBundle\Manager;

use Doctrine\ORM\EntityManager;
use Book\BookBundle\Entity\BookEntity;

class BookManager
{
    /** @var Entity Manager */
    protected $em;

    /** 
     * Constructor
     *
     * @param \Doctrine\ORM\EntityManager $em
     */
    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }


    public function createBook(BookEntity $book)
    {
        /... a specific logic if you need .../

        $this->em->persist($book);
        $this->em->flush();
    }
}

最后,在需要服务的地方(例如在控制器中)调用服务

public function yourSpecificAction()
{
    // We instanciate a new object

    $book = new BookEntity();
    $book->setTitle('Test Title');
    $book->setAuthor('Leps');
    $book->setReleaseDate(new \DateTime);
    $book->setGender('Scfi');
    $book->setDescription('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
    voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.');

    // we call the service
    $bookManager = $this->get('book.manager');

    // we call the method you need
    $bookManager->createBook($book);


    // same to: $bookManager = $this->get('book.manager')->createBook($book);
}

希望它能帮助你。。。

赵晟睿
2023-03-14

如果您需要在特定服务中注入原则实体管理器,请查看以下内容:

<service id="your_service" class="path_to_your_class_service">
     <argument type="service" id="doctrine.orm.entity_manager" />
</service>
 类似资料:
  • 所有操作均需要事先创建并配置 ORM 引擎才可以进行。XORM 支持两种 ORM 引擎,即 Engine 引擎和 Engine Group 引擎。一个 Engine 引擎用于对单个数据库进行操作,一个 Engine Group 引擎用于对读写分离的数据库或者负载均衡的数据库进行操作。Engine 引擎和 EngineGroup 引擎的API基本相同,所有适用于 Engine 的 API 基本上都适

  • 这本书的 SQL 部分的最后一个练习是一个很大的跳跃。你使用一个数据库知道了 SQL 语言的基础知识。你也应该精通 Python 的 OOP。现在是时候组合这两个,并创建一个对象关系管理器(ORM)。ORM 的工作是,使用简单的 Python 类,并将它们转换为数据库表中存储的行。如果你曾经使用过 Django,那么你已经使用他们的 ORM 来存储数据。在本练习中,你将尝试逆向分析如何实现它。 挑

  • 我在Symfony中创建了自己的第一个服务: 但是我得到了错误消息: 试图调用类“App\Service\PagesGenerator”中名为“getDoctrine”的未定义方法。 然后我试图在我的services.yaml中补充: 但是我得到了错误信息: 文件“/用户/工作/项目/配置/services.yaml”在 /Users/work/project/config/services.ya

  • 自从我从3.0更新到Symfony 3.4后,我当前有一个服务错误。 我有一个SwitchUserListener,它在其构造中接收几个对象,但它无法接收实体管理器,即使我有它的类型提示。我还为我的服务添加了一个公钥 我得到了一个FatalThrowableError,因为类用布尔值而不是EntityManager对象实例化。 错误消息 类型错误:传递给Dbm\UserBundle\Securit

  • 创建 faygo 的Web服务非常灵活自由。用户可以设置服务名称、服务版本号,一个项目应用可以同时创建多个服务、多种网络类型。 支持的网络类型: 网络类型 配置net_types值 HTTP http HTTPS/HTTP2(TLS) https HTTPS/HTTP2(Let’s Encrypt TLS) letsencrypt HTTPS/HTTP2(Let’s Encrypt TLS on

  • 本文向大家介绍symfony3 4.创建Symfony应用程序,包括了symfony3 4.创建Symfony应用程序的使用技巧和注意事项,需要的朋友参考一下 示例 Symfony Installer可用后,使用新命令创建第一个Symfony应用程序: 该命令可以在任何地方运行,而不必在htdocs文件夹中运行。 此命令将my_project_name/基于新的可用稳定Symfony版本创建一个名