0

您好我一直在学习使用 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 的子产品。

这样做的最佳方法是什么?

  • 使用 DI(就像现在一样)获取产品和子产品并检查 $product 是否
    包含 $subProduct,如果不更改我分配给
    视图的变量?或者:
  • 注入产品并使用 $product 的某种方法返回 $subproduct,如果它是产品的子产品。
  • 如果它的产品列是产品,则创建一个获取子产品的回购函数?

产品可以包含数百个子产品,对于我的应用程序,我只需要获取一个子产品并显示它,所以我不能只使用我的产品 getSubProducts() 方法,因为这会返回所有子产品。

感谢您的任何提示

4

2 回答 2

1

我知道这是个老问题,但没有关于依赖注入的内容。

在你的\My\Package\Domain\Model\Product你应该有protected $subProducts类型\Doctrine\Common\Collections\Collection<My\Package\Domain\Model\Subproduct>的字段setsubProducts,里面getSubProducts可能有addSubProduct(get + add) 方法。

它是集合,因此您可以使用containsadd等等。

现在,当您将产品分配给在控制器中查看时 - 在流体中{product}- 您可以使用流体for视图助手{product.subProducts}- 无需在控制器中获取它(所有从 Model 中获取 [和其他一些] 公共方法都是这样工作的) .

仅用于验证(更新时),您可以检查是否有$product->getSubProducts->contains($subProduct)什么..

于 2013-09-28T00:01:42.033 回答
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}

我希望这有帮助。要给出一个体面的建议,有必要了解您的整个应用程序,或者至少需要对问题有更深入的了解。

于 2013-08-03T14:03:38.110 回答