首页 > 解决方案 > 对象未找到,但在由“新”创建时工作

问题描述

它正在工作:

use AppBundle\Entity\Product;
use AppBundle\Entity\ProductPriceAccept;

public function editAction(Product $product)
{
   $ppa = new ProductPriceAccept();
   // further some operations on $product
}

但它不想工作:

use AppBundle\Entity\Product;
use AppBundle\Entity\ProductPriceAccept;

public function editAction(Product $product, ProductPriceAccept $ppa)
{
   $ppa->setPrice();
   // further some operations on $product
}

我得到:

AppBundle\Entity\ProductPriceAccept object not found.

Entity\ProductPriceAccept.php 是:

// src/AppBundle/Entity/ProductPriceAccept.php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="Product_Price_Accept")
 */
class ProductPriceAccept
{
   // ...
}

我有点困惑,因为通常类型提示对我来说效果很好,而且你可以看到它在产品实体的类似情况下工作。第一个解决方案工作正常,但我想知道第二个是如何产生问题的。我清除了缓存,检查了错别字。不知道还有什么可以做的。

标签: symfonytype-hintingsymfony-3.3

解决方案


只需读取一个参数,它就可以自动读取存储库。

不止一个,它需要一些帮助。

id 选项指定路由中的哪个占位符被传递给使用的存储库方法。如果未指定存储库方法,则默认使用 find()。

这还允许您在一个操作中拥有多个转换器:

因此,您将需要一个明确的 @ParamConverter 用于 ProductPriceAccept - 您可能还需要use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;line。

/**
 * @Route("/blog/{id}/comments/{comment_id}")
 * @ParamConverter("comment", class="SensioBlogBundle:Comment", 
 *     options={"id" = "comment_id"})
 */
public function showAction(Post $post, Comment $comment)
{
}

来自:@ParamConverter


推荐阅读