今天,我面临一个概念上的问题;我正在开发一个与教育相关的Web应用程序,用户将在其中使用多种问题选择形式来培训自己。
这是一个经常性的项目,因为它可能会导致围绕同一想法的其他一些项目,但有些衍生。
为了下次更加高效,我想为MQC表单做一个可重用的包;我脑子里有我的架构,除非用户,否则它不依赖于应用程序中的任何其他实体。这不是问题,因为它只是关系的一部分,我认为我可以将其作为参数传递。
这里最大的问题是:我已经在这个特定的应用程序中创建了一个通用实体,表示“内容类型”,并且包含一些重要信息,应用程序中的所有其他实体都应该共享这些信息。问题是,我可重用 bundle 包中的基类也应该从该通用类继承。
这就是我的意思:如何定义通用的东西,但在这种特定情况下,使其继承自我的应用程序实体之一?甚至有可能,或者是真正的不良观念?
也许我应该使用一个中介类,并添加与所有其他实体的关系,但是那样我将无法一起选择许多不同的内容类型(例如,出于历史目的)...
预先感谢
最佳答案
如果我理解您的想法正确,我将通过以下解决方案为您提供建议:
我将从一些可重复使用的 bundle 包“CustomerReviewBundle”中发布代码,因此我认为您将能够轻松地适应您的情况:
ProductInterface
处创建一个接口(interface)interface ProductInterface
{
}
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
...
}
并可以按照config.yml中的设置来定义可以用于评论的产品类型
doctrine:
# ...
orm:
# ...
resolve_target_entities:
Gamma\CustomerReview\CustomerReviewBundle\Interfaces\ProductInterface: \MyApp\ProductBundle\Entity\Product
因此,您可以采用相同的方法,只需将Product更改为
ContentType
类,然后就可以为每个使用可重复使用的 bundle 包的应用程序定义某些内容类型更多信息http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html
关于symfony - 可重用的包和实体继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29918777/