7

SonataAdminBundle は、クラスconfigureFormFieldsを拡張するときにメソッドを提供します。Admin

そのメソッドはFormMapperクラスを取ります。

このクラスを作成したエンティティについてはFormType、典型的な Symfony の方法でクラスを作成済みです。

を使用してフォームのプロパティを再度定義する代わりに、そのクラスを使用するにはどうすればよいFormMapperですか?

4

3 に答える 3

1

何かのようなもの:

public function configureFormFields(FormMapper $formMapper)
{        
    $form = new ReviewFormType();
    $form->buildForm($formMapper->getFormBuilder(),array());
}
于 2013-03-28T14:32:38.527 に答える
0

私は今日まったく同じことをしなければなりませんでした(カスタムフォームタイプを定義し、ソナタで使用しようとしました)何時間もきれいな方法を見つけた後、これを思いつきました:

formMapper->add('your_field', new YourType($your_params), array(                    
                ), array('type' => 'form'))

your_fieldフィールド名に置き換えてください。

new YourTypeカスタムフィールドタイプと

$your_paramsフィールドのコンストラクターのパラメーターを使用して、

4番目のパラメーターarray('type' => 'form')は非常に重要です。それは、フォームが実際にどのタイプであるかをsonataに伝えます(sonataはタイプのオブジェクトから自動的に決定しません)私のカスタムフィールドはformタイプを拡張します(それは独自のフィールドを持つ埋め込みフォームです)ので、私はそれを指定しますあなたの型は何か他のものを拡張し、それを指定します。うまくいけばうまくいくでしょう。

于 2013-10-08T11:20:59.700 に答える
0

まったく同じものを探してこの質問に出くわし、最終的にドキュメントで次のことを見つけました:

に SymfonyFormBuilderInterfaceインスタンスを 追加できますFormMapper。これにより、モデル フォーム タイプを再利用できます。を使用してフィールドを追加するFormBuilderInterfaceと、型が推測されます。

あなたがPostTypeこのようなものを持っているとします:

use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\AbstractType;

class PostType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('author', EntityType::class, [
                'class' => User::class
            ])
            ->add('title', TextType::class)
            ->add('body', TextareaType::class)
        ;
    }
}

次のように再利用できます。

use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use App\Form\PostType;

class Post extend AbstractAdmin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $builder = $formMapper->getFormBuilder()->getFormFactory()->createBuilder(PostType::class);

        $formMapper
            ->with('Post')
                ->add($builder->get('title'))
                ->add($builder->get('body'))
            ->end()
            ->with('Author')
                ->add($builder->get('author'))
            ->end()
        ;
    }
}

https://symfony.com/doc/master/bundles/SonataAdminBundle/reference/form_types.html#adding-a-formbuilderinterface

于 2018-04-10T09:41:11.107 に答える