TYPO3 Flow Dependency Injection和作为其他子对象的geting对象

时间:2013-05-30 14:06:33

标签: dependency-injection domain-driven-design typo3 typo3-flow

你好我一直在学习使用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,如果它是产品的子产品。
  • 创建一个repo函数,如果它是产品,则获取子产品 列是产品吗?

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

感谢您提供任何提示

2 个答案:

答案 0 :(得分:1)

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

\My\Package\Domain\Model\Product protected $subProducts中,\Doctrine\Common\Collections\Collection<My\Package\Domain\Model\Subproduct>字段为setsubProducts getSubProductsaddSubProductcontains,可能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}

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