覆盖SyliusCoreBundle模型用户

时间:2015-01-28 15:56:14

标签: symfony sylius

问题几乎重复How to override SyliusCoreBundle Model User 但原始问题的答案似乎并没有涵盖它。 所以问题是:

  • 添加新字段时覆盖此模型的最小步骤是什么?
  • 我创建了新的bundle,将一个模型添加到Entity文件夹并添加了以下内容 到app / config.yml:
    sylius_resource:
        resources:
            sylius.user:
                classes:
                    model: myVendor\myBundles\webBundle\Entity\User

但仍然项目使用Sylius \ Component \ Core \ Model \ User模型。

  • 我可以使用定义我的模型的注释吗?

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,是的,下面的步骤还没有在书中 - 不知道为什么。 除了上述内容,您还需要更改sylius.yml中的映射,该映射存在于/vendor/sylius/sylius/src/Sylius/Bundle/CoreBundle/Resources/config/app/sylius.yml

两地改变

sylius_installer:
    classes:
        user:
#            model: Sylius\Component\Core\Model\User # comment this out
            model: Acme\YourBundle\Entity\User

sylius_resource:
    resources:
        sylius.user:
            driver: doctrine/orm
            classes:
#                model: Sylius\Component\Core\Model\User # comment this out
                model: Acme\YourBundle\Entity\User

关于你的第一个问题:

  1. 您需要创建一个新的实体类,扩展原始用户模型并将其放在上面的代码段中,将路径放到新的实体类中。
  2. 在Entity类中,您需要定义新字段,然后定义其setter和getter。此外,您还需要定义一个与实体类同名的接口,如:UserInterface.php,只需放入扩展实体类的方法声明,并让您的实体实现此接口。
  3. 您还需要在Acme / YourBundle / Resources / config / doctrine / User.orm.xml中创建一个学说映射文件。您可以通过sylius user documentation中的文档查看相关步骤。
  4. 最后一步是添加您已在app / config / config.yml中完成的映射。
  5. 对于你的第二个问题: 您可以在自己的包中定义的来源中使用注释,即Acme / YourBundle,但在sylius子包中,如resourcebundle等,您需要使用其中已使用的内容。

    如果有更好的方法 - 请告诉我!