我有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');
}
我该怎么做?请帮我。 :)
答案 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正在弃用我认为的那种行为。