对象未找到但在由“新”创建时工作
Posted
技术标签:
【中文标题】对象未找到但在由“新”创建时工作【英文标题】:Object not found but working when created by "new" 【发布时间】:2018-10-29 15:25:01 【问题描述】:它正在工作:
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
// ...
我有点困惑,因为通常类型提示对我来说效果很好,而且你可以看到它在产品实体的类似情况下也适用。第一个解决方案工作正常,但我想知道第二个是如何产生问题的。我清除了缓存,检查了错别字。不知道还能做什么。
【问题讨论】:
显示您的路由配置。看起来ParamConverter
不起作用。
路由:admin_product_edit:路径:/abcadm/product-edit/id/ 默认值: _controller: AppBundle:AdminProduct:edit
【参考方案1】:
读取单个参数,自动读取仓库。
不止一个,它需要一些帮助。
id 选项指定路由中的哪个占位符被传递到使用的存储库方法。如果未指定存储库方法,则默认使用 find()。
这还允许您在一个操作中拥有多个转换器:
因此,您将需要一个明确的 @ParamConverter 用于 ProductPriceAccept - 您可能还需要 use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
行。
/**
* @Route("/blog/id/comments/comment_id")
* @ParamConverter("comment", class="SensioBlogBundle:Comment",
* options="id" = "comment_id")
*/
public function showAction(Post $post, Comment $comment)
来自:@ParamConverter。
【讨论】:
好的,我明白了...所以最简单的方法似乎是 $ppa = new ProductPriceAccept();正如我在我的第一个工作代码中所写的那样。更少的代码。还是我错过了什么? 这在很大程度上取决于您使用这两个实体的目的,以及您打算从哪里获得内容,以及如何获得。以上是关于对象未找到但在由“新”创建时工作的主要内容,如果未能解决你的问题,请参考以下文章
直接或从 Makefile 执行 Python 程序时未找到模块,但在使用“python”运行时工作正常
计时器中的graphics.DrawLine中的“System.ArgumentException参数无效”
“未找到编译器镜像中的 scala.runtime”,但在使用 -Xbootclasspath/p:scala-library.jar 启动时工作