gpt4 book ai didi

symfony - 可重复使用的包和实体继承

转载 作者:行者123 更新时间:2023-12-02 04:49:46 27 4
gpt4 key购买 nike

今天,我面临一个概念性问题;我正在开发一个与教育相关的 Web 应用程序,用户将在其中使用多个问题选择表单来训练自己。

这是一个可能会反复出现的项目,因为它可能会导致围绕同一想法的其他一些项目,但有一点派生。

为了下次更有效率,我想为 MQC 表单做一个可重复使用的包;我的架构就在我的脑海中,它不依赖于应用程序中的任何其他实体,除非用户。这不是问题,因为它只是关系的一部分,我想我可以将它作为参数传递。

这里最大的问题是:我在这个特定的应用程序中创建了一个代表“内容类型”的通用实体,并包含应用程序中所有其他实体应该共享的一些重要信息。问题是,我在可重用包中的基类也应该继承自这个泛型类..

这就是我感到震惊的地方:如何定义一些通用的东西,但在这种特定情况下让它继承 self 的应用程序实体之一?甚至有可能,还是真正的坏主意?也许我应该使用一个中间类,并添加与我所有其他实体的关系,但那样我就无法同时选择许多不同的内容类型(例如,出于历史目的)...

提前致谢

最佳答案

如果我理解你的想法是正确的,我会建议你遵循以下解决方案:我将从我的一些可重复使用的包“CustomerReviewBundle”中发布代码,因此我认为您将能够轻松地适应您的情况:

  1. 在可重复使用的包 ProductInterface

    中创建一个接口(interface)

    interface ProductInterface
    {

    }
  2. 然后您可以引用 ContentTypeInterface

    在您的可重用包中创建一个实体

    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
    use \Gamma\CustomerReview\CustomerReviewBundle\Interfaces\ProductInterface;

    /**
    * @ORM\Entity(repositoryClass="Gamma\CustomerReview\CustomerReviewBundle\Repository\CustomerReviewRepository")
    * @ORM\Table(name="customer_review", indexes={
    * @ORM\Index(name="enabled_idx", columns={"enabled"}),
    * @ORM\Index(name="rating_idx", columns={"enabled", "rating"}),
    * @ORM\Index(name="sort_idx", columns={"date"})
    * })
    */
    class CustomerReview
    {
    ....
    other properties
    ...
    /**
    * Product
    *
    * @ORM\ManyToOne(targetEntity="Gamma\CustomerReview\CustomerReviewBundle\Interfaces\ProductInterface")
    */
    private $product;
    ....
    getters/setters
    ...
    }
  3. 然后我在我的应用程序中连接我的可重用包

并且可以通过 config.yml 中的设置定义确切的产品类型可以用于评论

doctrine:
# ...
orm:
# ...
resolve_target_entities:
Gamma\CustomerReview\CustomerReviewBundle\Interfaces\ProductInterface: \MyApp\ProductBundle\Entity\Product

所以您可以采用相同的方式,只需将 Product 更改为您的 ContentType 类,然后您就可以为每个使用您的可重用包的应用程序定义特定的内容类型

更多信息 http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html

关于symfony - 可重复使用的包和实体继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29918777/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com