实体预期对象返回symfony

贾普·乔普(Jaap Joop)

我正在尝试从数据库中获取一个项目并将其传递给新项目以推送到数据库。

$post = $entityManager->getRepository('App:Post')
            ->find($id);

$comment->setPost($post)

setPost如下所示:

public function setPost(Post $post): self
    {
        $this->post = $post;

        return $this;
    }

$post变量:

 /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Post", inversedBy="comments")
     * @ORM\JoinColumn(nullable=false)
     */
    private $post;

但是,当我尝试设置类似的帖子setPost($post)时,出现以下错误:

提供了“ \ App \ Entity \ Post”,“ object”类型的预期参数

佳美

我认为,您看到的错误来自集成开发环境(IDE),例如eclipse,vs代码,phpstorm等。但是代码-实际执行时-应该可以工作。

现在,错误很可能是由于在所述IDE的后台运行静态代码分析引起的,该代码分析将查看该语句并尝试根据调用的方法,访问的属性等来分析变量类型。

因此,让我们慢慢地进行操作(您可以将鼠标悬停在上$vars->methods()进行验证。我感兴趣的那行是

$post = $entityManager->getRepository('App:Post')
            ->find($id);

同样$entityManager是type EntityManagerInterface,它具有一个getRepository带有一个类型为必需参数的方法string'App:Post'在您的情况下),它将返回一个type的对象ObjectRepository,该对象具有一个find需要一个参数的方法mixed不问),并返回?object表示,objectnull因此,$post是类型的object(最佳情况,或者为null,在这种情况下它将失败!)。现在,下一行显然需要一个类型的参数,Post而不是类型的参数object,因此是警告/通知/错误。

现在,静态代码分析在一定程度上是很有帮助的,但是它并不是有一定限制的,因为它有局限性。它不知道什么运行时会真正返回,它只是假设(理论)在代码中找到的类型提示足够具体-在您的情况下不是。

简单的解决方法

添加一个文档字符串以告诉静态代码分析该变量$post的实际类型是什么:

/** @var Post $post */
$post = $entityManager->getRepository('App:Post')
            ->find($id);

这可以明确地告诉您静态分析工具$post的类型Post,也许您必须编写App\Entity\Post甚至\App\Entity\Post

硬修复

或者,您可以实现自己的方法PostRepository(该原理提供了一些帮助),并定义了一个函数function findById($id) :Post-,该函数将明确告诉静态代码分析,在代码中调用返回类型是什么(通过依赖注入注入到函数中PostRepostory $postRepository):

$post = $postRepository->findById($id);

如果您使用大量不同的实体,这是一个非常冗长的解决方案,但是根据您的项目,这可能是值得的,因为您显式地命名了依赖项,而不是注入非常不确定的(如我们所见)EntityManagerInterface使用EntityManagerInterface可能会测试HELL(imho!)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony 2.3 nextBytes()未返回预期结果

来自分类Dev

symfony2实体对象与整数崩溃

来自分类Dev

JavaScript返回对象未按预期工作

来自分类Dev

IE8返回“对象预期”原型

来自分类Dev

iolanguage getSlot不返回预期的对象

来自分类Dev

iolanguage getSlot不返回预期的对象

来自分类Dev

Reducer 不返回预期的空对象

来自分类Dev

实体框架存储过程返回空对象

来自分类Dev

实体框架存储过程返回空对象

来自分类Dev

将实体对象或 POJO 返回到 UI?

来自分类Dev

JPA / HIBERNATE:如何查询返回非实体对象或带有内部非实体对象的对象列表?

来自分类Dev

Symfony2-实体findAll在API上返回大响应

来自分类Dev

Symfony2实体时间类型返回格式

来自分类Dev

symfony 3 表单实体返回转换错误

来自分类Dev

Symfony将json编码的文件对象添加到实体

来自分类Dev

转换Symfony2 PHP实体对象以在Javascript中使用

来自分类Dev

实体属性类型作为Symfony2中的对象

来自分类常见问题

require_once返回true而不是预期的对象

来自分类Dev

查询以检查日期时间对象未返回预期结果

来自分类Dev

RSpec-预期等于?(时间对象)返回true,得到false

来自分类Dev

对象到字符串不返回预期结果

来自分类Dev

对象获取访问器未返回预期值

来自分类Dev

扫描仪对象未返回预期结果

来自分类Dev

意外的 undefined 作为订阅从 Observable 返回,其中对象是预期的

来自分类Dev

Symfony2:存储库的findAll()返回相同实体的多个实例,而不是所有实体

来自分类Dev

实体框架CodeFirst多对多返回对象null

来自分类Dev

实体框架CodeFirst多对多返回对象null

来自分类Dev

从Spring实体返回可序列化的对象

来自分类Dev

实体框架:在 SaveChanges 返回的对象没有孩子之后

Related 相关文章

  1. 1

    Symfony 2.3 nextBytes()未返回预期结果

  2. 2

    symfony2实体对象与整数崩溃

  3. 3

    JavaScript返回对象未按预期工作

  4. 4

    IE8返回“对象预期”原型

  5. 5

    iolanguage getSlot不返回预期的对象

  6. 6

    iolanguage getSlot不返回预期的对象

  7. 7

    Reducer 不返回预期的空对象

  8. 8

    实体框架存储过程返回空对象

  9. 9

    实体框架存储过程返回空对象

  10. 10

    将实体对象或 POJO 返回到 UI?

  11. 11

    JPA / HIBERNATE:如何查询返回非实体对象或带有内部非实体对象的对象列表?

  12. 12

    Symfony2-实体findAll在API上返回大响应

  13. 13

    Symfony2实体时间类型返回格式

  14. 14

    symfony 3 表单实体返回转换错误

  15. 15

    Symfony将json编码的文件对象添加到实体

  16. 16

    转换Symfony2 PHP实体对象以在Javascript中使用

  17. 17

    实体属性类型作为Symfony2中的对象

  18. 18

    require_once返回true而不是预期的对象

  19. 19

    查询以检查日期时间对象未返回预期结果

  20. 20

    RSpec-预期等于?(时间对象)返回true,得到false

  21. 21

    对象到字符串不返回预期结果

  22. 22

    对象获取访问器未返回预期值

  23. 23

    扫描仪对象未返回预期结果

  24. 24

    意外的 undefined 作为订阅从 Observable 返回,其中对象是预期的

  25. 25

    Symfony2:存储库的findAll()返回相同实体的多个实例,而不是所有实体

  26. 26

    实体框架CodeFirst多对多返回对象null

  27. 27

    实体框架CodeFirst多对多返回对象null

  28. 28

    从Spring实体返回可序列化的对象

  29. 29

    实体框架:在 SaveChanges 返回的对象没有孩子之后

热门标签

归档