今天,我面临一个概念问题;我正在开发一个与教育相关的网络应用程序,用户将使用多种问题选择表单进行自我训练。
这是一个可能经常发生的项目,因为它可能导致其他一些项目围绕同一个想法,但有点衍生。
为了提高下次的效率,我想为MQC表单做一个可重用的包;我的架构就在我脑海中,除了用户之外,它不依赖于应用程序中的任何其他实体。这不是问题所在,因为它只是关系的一部分,我想我可以把它作为参数传递。
这里最大的问题是:我在这个特定的应用程序中创建了一个通用实体reprenseting" content types",并包含应用程序中所有其他实体应该共享的一些重要信息。问题是,我可重用的bundle中的基类也应该继承这个泛型类..
这就是我所遇到的:如何定义通用的东西,但在这个特定情况下,它是否继承自我的一个应用程序实体?它甚至是可能的,还是真正糟糕的概念? 也许我应该使用中间类,并添加与我所有其他实体的关系,但是我不能一起选择许多不同的内容类型(例如,出于历史目的)......
先谢谢
答案 0 :(得分:0)
如果我理解你的想法,我会根据解决方案给你建议: 我将从我的一些可重复使用的软件包“CustomerReviewBundle”发布代码,因此我认为您将能够轻松地为您的案例进行调整:
在可重复使用的包ProductInterface
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
因此,您可以采用相同的方式,只需将产品更改为ContentType
类,然后就可以为使用可重复使用的捆绑包的每个应用定义某些内容类型
更多信息http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html