Symfony2:传递给 Doctrine\ORM\EntityRepository::__construct() 的参数 2 必须是给定的 Doctrine\ORM\Mapping\ClassMetadata、none 的实例

Symfony2 : Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, none given

我正在尝试使用 FOSOAuthServerBundle 在我的实际 symfony2 项目中实施 OAuth2。

我一直在关注这个 Article 来实现它。

因为我不使用 FOS 用户包,所以我不得不创建一个 UserProvider。

我也在使用 A User Repository,就像他在 Article 中所做的那样。

我一直被这个错误所困:

ContextErrorException: Catchable Fatal Error: Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, none given, called in /app/cache/dev/appDevDebugProjectContainer.php on line 3527 and defined in /app/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php line 67

我已经按照 services.yml 的给定代码进行操作:

并将其转换为 Yaml,这是我的文件 (services.yml) :

imports:
    - { resource: parameters.yml }

parameters:
#   wca_transition.example.class: WCA\TransitionBundle\Example
    collection.import.from_email: "%import_from_email%"
    collection.import.to_email: "%import_to_email%"
    platform.entity.user.class: WCA\ServerBundle\Entity\Profile
    platform.user.provider.class: WCA\ServerBundle\Provider\ProfileProvider

services:
#    wca_betosee_transition.example:
#        class: %wca_transition.example.class%
#        arguments: [@service_id, "plain_value", %parameter%]

    collectionImportCommand:
        class: WCA\ServerBundle\Command\CollectionImporterCommand
        calls:
        - [setContainer, ["@service_container"] ]

    platform.user.manager:
        class: Doctrine\ORM\EntityManager
        factory-service: doctrine
        factory-method: getManagerForClass
        arguments: ["%platform.entity.user.class%"]

    platform.user.repository:
        class: WCA\ServerBundle\Model\ProfileRepository
        factory-service: platform.user.manager
        factory-method: getRepository
        arguments: ["%platform.entity.user.class%"]

    platform.user.provider:
        class: "%platform.user.provider.class%"
        # arguments: ["@platform.user.repository"]

    platform.grant_type.api_key:
        class: WCA\ServerBundle\OAuth\ApiKeyGrantExtension
        arguments: ["@platform.user.repository"]
        tags:
            - { name: fos_oauth_server.grant_extension, uri: http://mywebsite.local/grants/api_key }

我想给定的错误来自我的配置,但我看不出有什么问题,因为我遵循了给定的内容。要么创建的服务没有得到给定的参数("none given"),要么我没有传递正确的参数。

有什么想法或提示吗?

PS : 如果您需要任何其他文件,请不要犹豫,我会更新 post。

我怀疑它是否有帮助,但尝试将 factory-service,factory-method 更改为 factory_service 和 factory_method 以匹配 Symfony 文档。

听起来这是唯一一篇很好地描述了如何实现 FOS OAuth2 捆绑包的文章,甚至比他们自己的文档还要好。 但出于某种原因,服务是在 xml 中定义的,我觉得这很奇怪和丑陋。

无论如何,正如@Cerad 提到的,如果您将 xml 服务转换为 yaml 格式,那么您必须将 - 替换为 _ 并且它将正常工作。