【发布时间】:2017-12-21 09:02:16
【问题描述】:
我有以下 symfony 2.8 控制器
/**
* Finds and displays a productVariation entity.
*
* @Route("/{productId}/variation/{variationId}", name="productvariation_show")
* @ParamConverter("variation", class="AppBundle:ProductVariation", options={"id" = "variationId"})
* @ParamConverter("product", class="AppBundle:Product", options={"productId" = "productId"})
* @Method("GET")
*/
public function showVariationAction(Product $product,ProductVariation $productVariation)
{
$deleteForm = $this->createVariationDeleteForm($product,$productVariation);
dump($product);
dump($productVariation);
/.../
}
问题是ProductVariation的自动注入对象实例是错误的。
更多细节
-
路由中的
{productId}参数工作正常,这意味着如果我使用1作为{productId},则通过第一个参数(Product $product)正确地给我相应的Productobject。 - 但
{variationId}参数未正确加载。它总是加载一个特定的ProductVariation对象,而不管传递给{variationId}的内容(以../1/variation/1和../1/variation/2和../1/variation/3都加载ProductVariation对象和id-2)。 - 刚刚发现自动加载的
ProductVariation对象取决于传递给{productId}的内容。似乎自动注入的ProductVariation对象始终是给定id值最低的对象Product(产品和产品变体之间存在一对多关系) -
已经用同样的问题尝试了下面的代码
/** * Finds and displays a productVariation entity. * @Route("/{productId}/variation/{Id}", name="productvariation_show") * @Method("GET") */ public function showVariationAction(Product $product,ProductVariation $productVariation){ /...
Entities的代码sn-ps如下
class Product{
/**
* @var int
*
* @ORM\Column(name="product_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $productId;
/../
public function getProductId(){
return $this->productId;
}
/..
class ProductVariation{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/../
public function getId(){
return $this->id;
}
/..
我无法完全理解这种行为,我想加载通过路由参数传递的任何 Product 或 ProductVariation 对象
【问题讨论】:
标签: routing symfony-2.8