netpositive/discriminatormap-bundle

用于Symfony2和Doctrine ORM 2的动态DiscriminatorMap扩展器

v2.2.1 2013-03-12 16:49 UTC

This package is not auto-updated.

Last update: 2024-09-28 14:24:39 UTC


README

提供在Symfony2中通过Doctrine ORM 2使用Class Table Inheritance扩展继承映射类DiscriminatorMap的可能性。

此包旨在通过配置文件扩展现有的DiscriminatorMap(来自任何映射),如果你不能手动完成(即:你想要扩展的包在你的项目外开发)。

安装

1. 使用composer

1.1 将netpositive/discriminatormapbundle添加到你的composer.json文件中

// composer.json
{
"require": {
    ...
    "netpositive/discriminatormap-bundle": "dev-master"

1.2 在你的内核中启用它

// app/AppKernel.php
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            ...
            new Netpositive\DiscriminatorMapBundle\NetpositiveDiscriminatorMapBundle(),

2. 使用供应商

2.1 添加到deps文件

[NetpositiveDiscriminatorMapBundle]
    git=git://github.com/Netpositive/NetpositiveDiscriminatorMapBundle.git
    target=bundles/Netpositive/DiscriminatorMapBundle

2.2 在你的autoload.php中注册命名空间

// app/autoload.php
$loader->registerNamespaces(array(
    ...
    'Netpositive'      => __DIR__.'/../vendor/bundles',

2.3 在你的内核中启用它

// app/AppKernel.php
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            ...
            new Netpositive\DiscriminatorMapBundle\NetpositiveDiscriminatorMapBundle(),

配置

# app/config/config.yml
netpositive_discriminator_map:
    discriminator_map:
        content:
            entity: Netpositive\CmsBundle\Entity\Content
            children:
                course: University\CmsBundle\Entity\Content\Course
                phonebook_entry: University\CmsBundle\Entity\Content\PhonebookEntry
                ...

父类

/**
 * Netpositive\CmsBundle\Entity\Content
 *
 * @ORM\Table(name="content")
 * @ORM\Entity()
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="content_type", type="string", length="20")
 * @ORM\DiscriminatorMap({"content" = "Content", "article" = "Article", ... })
 *
 */
class Content
{
...

子类

/**
 * University\CmsBundle\Entity\Content\Course
 *
 * @ORM\Table(name="course")
 * @ORM\Entity()
 */
class Course extends Content
{
...

/**
 * University\CmsBundle\Entity\Content\PhonebookEntry
 *
 * @ORM\Table(name="phonebook_entry")
 * @ORM\Entity()
 */
class PhonebookEntry extends Content
{
...