Symfony2:传递给 Doctrine\ORM\EntityRepository::__construct() 的参数 2 必须是 Doctrine\ORM\Mapping\ClassMetada
Posted
技术标签:
【中文标题】Symfony2:传递给 Doctrine\\ORM\\EntityRepository::__construct() 的参数 2 必须是 Doctrine\\ORM\\Mapping\\ClassMetadata 的实例,没有给出【英文标题】:Symfony2 : Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, none givenSymfony2:传递给 Doctrine\ORM\EntityRepository::__construct() 的参数 2 必须是 Doctrine\ORM\Mapping\ClassMetadata 的实例,没有给出 【发布时间】:2015-01-26 17:01:21 【问题描述】:我正在尝试使用 FOSOAuthServerBundle 在我的实际 symfony2 项目中实现 OAuth2。
我一直在关注这个Article 来实现它。
由于我不使用 FOS 用户包,我必须创建一个 UserProvider。
我也在使用 A User Repository,就像他在 Article 中所做的那样。
我一直被这个错误困扰:
ContextErrorException:可捕获的致命错误:传递给 Doctrine\ORM\EntityRepository::__construct() 的参数 2 必须是 Doctrine\ORM\Mapping\ClassMetadata 的实例,没有给出,在 /app/cache/dev/appDevDebugProjectContainer 中调用。 php 在第 3527 行并在 /app/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php 第 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
我想给定的错误来自我的配置,但我看不出有什么问题,因为我遵循了给定的内容。创建的服务没有得到给定的参数(“没有给定”),或者我没有传递正确的参数。
有什么想法或提示吗?
PS:如果您需要任何其他文件,请不要犹豫,我会更新帖子。
【问题讨论】:
我怀疑它是否会有所帮助,但尝试将 factory-service,factory-method 更改为 factory_service 和 factory_method 以匹配 symfony 文档。 @Cerad 是对的。你的配置有错别字。 这确实是解决方案!谢谢!如果@Cerad 想写答案,我很乐意将其设置为正确答案。 【参考方案1】:我怀疑它是否会有所帮助,但尝试将 factory-service、factory-method 更改为 factory_service 和 factory_method 以匹配 Symfony 文档。
【讨论】:
【参考方案2】:听起来这是唯一一篇很好地描述了如何实现 FOS OAuth2 捆绑包的文章,甚至比他们自己的文档还要好。 但是由于某种原因,服务是在 xml 中定义的,我觉得这很奇怪和丑陋。
无论如何,正如@Cerad 所提到的,如果您将 xml 服务转换为 yaml 格式,那么您必须将 - 替换为 _ 并且它会正常工作。
【讨论】:
是的,这确实是解决方案。感谢您的反馈。以上是关于Symfony2:传递给 Doctrine\ORM\EntityRepository::__construct() 的参数 2 必须是 Doctrine\ORM\Mapping\ClassMetada的主要内容,如果未能解决你的问题,请参考以下文章
级联持久性不工作(Doctrine ORM + Symfony 2)
Doctrine - 传递给 __construct 的参数必须是一个数组
Doctrine ORM:NULL到DateTime转换错误
如何在 Doctrine ORM 中使用 createQueryBuilder 选择特定列?