Symfony 4: использовать существующий класс типа формы в методе configureFormFields в Sonata - PullRequest
0 голосов
/ 06 февраля 2020

Я знаю Я могу вытащить отдельные элементы формы из компоновщика типа в средство отображения форм , как описано в документации :

Вы можете добавить Symfony FormBuilderInterface экземпляров до 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()
        ;
    }
}

Тем не менее, это кажется неуклюжим, если все, что вы хотите, - это чтобы Sonata использовал этот точный тип как есть.

Поэтому мне было интересно, есть ли сокращение, которое говорит сонате просто использовать весь тип формы как есть? .

Что-то вроде:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper->mapForm((new PostType()));
}
...