Я знаю Я могу вытащить отдельные элементы формы из компоновщика типа в средство отображения форм , как описано в документации :
Вы можете добавить 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()));
}