を注入します私は、この製品がフォームに追加するために利用できるオプション(色、サイズなど)を知っています。symfonyのフォームは、私はsymfonyのフォームタイプを持っていると私はそれに私が作成した別のフォームを注入したいオブジェクト
class ProductOptionType extends AbstractType
{
private $productOptions;
public function __construct(Product $product)
{
$this->productOptions = $product->getOptions();
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($this->productOptions as $option) {
$builder->add($option->getId(), ChoiceType::class, [
'choices' => $option->getChoicesForForm(),
'label' => $option->getName()
]);
}
}
}
問題はここでコンストラクタを渡すのですか?
$form->add('options', ProductOptionType::class);
上記は、インジェクタの製品に合格することなくタイプをインスタンス化するので、contstructorなしのエラーをスローします。それは文字列ではなくオブジェクトを想定しているため
$form->add('options', new ProductOptionType($product));
:
また、この1は例外をスローします。
をサービス:http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html#creating-your-field-type-as-a-service。ただし、フォームタイプを作成するには、フォームファクトリを使用する必要があるため、通常、あるフォームタイプを別のフォームタイプに挿入しないでください。それはできますが、それは珍しいことです。コレクション、http://symfony.com/doc/current/cookbook/form/form_collections.htmlが良いかもしれません。 – Cerad