不明な理由があるため、列の名前が一致してデータが通過しても、EntityTypeフォームフィールドには選択されたオプションが表示されません。Symfony 3.3 Form - EntityTypeフィールドでオプションが選択されない
私は、製品のリストをフィルタリングするいくつかの値を選択するために使用しているフォームを作成しました。
<?php namespace AppBundle\Filter;
use AppBundle\Entity\ProductCategory;
use AppBundle\Repository\ProductCategoryRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class ProductFilterType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('id', null, [
'required' => false,
'label' => 'SKU'
])
->add('productCategory', EntityType::class,
array(
'class' => ProductCategory::class,
'choice_label' => 'name',
'choice_value' => 'id',
'placeholder' => '',
'label_attr' => array('title' => 'Category for this product'),
'query_builder' => function (ProductCategoryRepository $v) {
return $v->createQueryBuilder('v')
->orderBy('v.name',' ASC');
}
))
->add('name', null, [
'required' => false,
])
->add('description', null, [
'required' => false,
])
;
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'app_bundle_product_filter_type';
} }
フォームは予想どおりにレンダリングされ、リクエストから受け取った値に基づいてフィルタリングする同じURLに投稿を送信します。
これは問題ありません。
ただし、フォームが再レンダリングされると、フォームフィルタの送信前に選択されたオプションは選択されなくなります。その他の入力はすべて再投入されます。
私はエンティティにバインドされた形で働いていることに気づきました(すなわち:製作中とエンティティを保存)し、データクラスを設定するConfigureOptionsメソッドを使用して、EntityTypeことをフォームフィールドは期待通りに機能します。しかし、全体のフォームがエンティティにバインドされていない場合には、このメソッドを使用する必要があります。
編集: これらの手順を実行することは私にとってはうまくいったのですが、ちょっと変わっているようです。
フォームコンストラクタに注入エンティティマネージャ:
public $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}
そして、配列値に基づいてオブジェクトを取得するにはEntityTypeのフォームフィールドを更新:...
私はあなたがここで何をしているのかを見ています。このバージョンを実行すると、私のために働いています。 しかし、私はまだこの仕事をより簡単にする何かが欠けているように感じます。 –