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 を返します。
  • 製品列が製品の場合、サブ製品を取得するレポ関数を作成しますか?

製品には何百ものサブ製品を含めることができます。私のアプリケーションでは、1 つのサブ製品を取得してそれを表示するだけでよいため、すべての製品が返されるため、製品の getSubProducts() メソッドだけを使用することはできません。

ヒントをありがとう

4

2 に答える 2

1

古い質問だと思いますが、依存性注入については何もありません。

あなたの中に、、およびおそらく(get + add) メソッドを含むタイプの\My\Package\Domain\Model\Productフィールドが必要です。protected $subProducts\Doctrine\Common\Collections\Collection<My\Package\Domain\Model\Subproduct>setsubProductsgetSubProductsaddSubProduct

containsなどに使えるコレクションですadd

コントローラーでビューに割り当てられた製品がある場合-流動的なsthのように-流動的なビューヘルパーを{product}使用できます-コントローラーでそれを取得する必要はありません(モデルからのすべての取得[およびその他の]パブリックメソッドはそのように機能します) .for{product.subProducts}

検証のために(更新時に)$product->getSubProducts->contains($subProduct)、何かがあるかどうかを確認できます..

于 2013-09-28T00:01:42.033 に答える
0

私は最初のアプローチで行きます。$subProduct が実際に $product に属しているかどうか、フレームワークがエンティティを提供し、アクションをチェックインできるようにします。

私の経験からすると、多くの場合、単純なアプローチを採用するのが最善です。

ここで何を達成しようとしているのかわかりませんが、$subProduct のみを表示したい場合、なぜ $subProduct を DI せず、テンプレート内の製品との関係を使用しないのですか? $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}

これが役立つことを願っています。まともなアドバイスをするには、アプリケーション全体を知るか、少なくとも 1 つは問題をよりよく理解する必要があります。

于 2013-08-03T14:03:38.110 に答える