Symfony表单 - 独立表单的一个类和其他表单的一部分

时间:2015-11-29 11:59:23

标签: php forms symfony

我有Symfony表单类型,我想独立使用它们并作为其他表单的一部分。我的班级看起来像这样:

class PracownikType extends AbstractType
{

    const DATA_CLASS = 'AppBundle\Entity\Pracownik';

    /** @var IPracownikRepository */
    private $pracownikRepository;

    /** @var User */
    private $user;

    /**
     * PracownikType constructor.
     * @param IPracownikRepository $pracownikRepository
     * @param TokenStorage $tokenStorage
     */
    public function __construct(IPracownikRepository $pracownikRepository, TokenStorage $tokenStorage)
    {
        $this->pracownikRepository = $pracownikRepository;
        $this->user = $tokenStorage->getToken()->getUser();
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('imie', 'text')
            ->add('nazw', 'text')
            ->add('email', 'text')
            ->add('iloscDniWolnych', 'integer')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'class' => self::DATA_CLASS,
            'choices' => $this->pracownikRepository->findAllByUser($this->user),
            'choice_label' => 'getNazw'
        ]);
    }


    public function getParent()
    {
        return 'entity';
    }

    public function getName()
    {
        return 'pracownik';
    }

}

我使用此类创建独立表单:

$form = $this->createForm('pracownik', $this->dodajPracownikaCommand);

其他形式的一部分:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('pracownik', 'pracownik');
}

我该怎么做?请帮我。 :)

1 个答案:

答案 0 :(得分:0)

而不只是使用字符串'pracownik',创建一个像new PracownikType()这样的实例。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('pracownik', new PracownikType());
}

如果必须使用字符串,则必须将表单类型声明为服务。请参阅:http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services

我不建议此时,因为Symfony 2.8正在弃用我认为的那种行为。