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使用您的字段的构造函数的参数,

第四个参数array('type' => 'form')非常重要,它告诉奏鸣曲您的表单实际上是什么类型(奏鸣曲不会根据您的类型的对象自动确定)我的自定义字段扩展了form类型(它是具有自己字段的嵌入式表单)所以我指定,如果您的类型扩展了其他内容,然后指定它,希望它能正常工作。

于 2013-10-08T11:20:59.700 回答
0

我在寻找完全相同的东西时遇到了这个问题,最终在文档中找到了以下内容:

您可以将 SymfonyFormBuilderInterface实例添加到 FormMapper. 这允许您重新使用模型表单类型。使用 a 添加字段时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 回答