netpositive / discriminatormap-bundle
用于Symfony2和Doctrine ORM 2的动态DiscriminatorMap扩展器
v2.2.1
2013-03-12 16:49 UTC
Requires
- php: >=5.3.1
- symfony/framework-bundle: 2.2.*
Suggests
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
{
...