你好我一直在学习使用FLOW并有一些问题:
我在这样的控制器中有一个动作:
/**
* Displays a subproduct.
*
* @param \My\Package\Domain\Model\Product $product The main product.
* @param \My\Package\Domain\Model\Subproduct $subProduct A sub-product of $product.
* @return void
*/
public function subproductAction(\My\Package\Domain\Model\Product $product, \My\Package\Domain\Model\Subproduct $subProduct) {
$this->view->assign('product', $product);
$this->view->assign('subProduct', $subProduct);
}
这对于测试和学习框架很好,但现在我想确保$ subProduct实际上是$ product的子产品。
这样做的最佳方法是什么?
产品可以包含子产品的hundreads,对于我的应用程序,我只需要获得一个子产品并显示它,所以我不能只使用我的产品getSubProducts()方法,因为这将返回所有这些。
感谢您提供任何提示
答案 0 :(得分:1)
我知道这是一个老问题,但没有关于依赖注入。
在\My\Package\Domain\Model\Product
protected $subProducts
中,\Doctrine\Common\Collections\Collection<My\Package\Domain\Model\Subproduct>
字段为setsubProducts
getSubProducts
,addSubProduct
,contains
,可能add
(获取+添加)里面的方法。
它是集合,因此您可以使用{product}
,for
等等。
现在,当您在控制器中分配了要查看的产品时 - 如{product.subProducts}
那样流畅 - 您可以在$product->getSubProducts->contains($subProduct)
上使用流畅的{{1}}查看助手 - 无需获取它在控制器中(所有得到[和其他一些]公共方法来自模型的工作方式)。
只是为了验证(更新时),您可以检查{{1}}是否......
答案 1 :(得分:0)
我会采用第一种方法。如果$ subProduct实际上属于$ product,那么让框架为您提供实体并检查您的操作。
根据我的经验,采用简单的方法通常是最好的。
我不确定你要在这里实现什么,但如果你只想显示$ subProduct为什么没有DI $ subProduct并使用它与模板中产品的关系?我的意思是$ subProduct必须与产品有一些反比关系吗?
所以,你的行动看起来像这样:
/**
* Displays a subproduct.
*
* @param \My\Package\Domain\Model\Subproduct $subProduct A sub-product of $product.
* @return void
*/
public function subproductAction(\My\Package\Domain\Model\Subproduct $subProduct) {
$this->view->assign('subProduct', $subProduct);
}
在您的模板中,您可以执行以下操作:
{subProduct.product.title}
我希望这会有所帮助。为了给出一个体面的建议,有必要了解整个应用程序,或者至少有一个需要了解问题。