Php Symfony2将选项传递到抽象FormType
我已经在这上面呆了很长时间了。我在这里读了很多答案,但我无法运行它 我的控制器包含Php Symfony2将选项传递到抽象FormType,php,symfony,Php,Symfony,我已经在这上面呆了很长时间了。我在这里读了很多答案,但我无法运行它 我的控制器包含 $series = $this->getDoctrine()->getRepository('DemoDemoBundle:Series')->createQueryBuilder('series') ->where('series.type = 1') ->getQuery()->getResult(); $magazine = new Magazine();
$series = $this->getDoctrine()->getRepository('DemoDemoBundle:Series')->createQueryBuilder('series')
->where('series.type = 1')
->getQuery()->getResult();
$magazine = new Magazine();
$content = array(
'series' => $series
);
$form = $this->createForm(new MagazineType($this->get('translator'), $content), $magazine);
$form->handleRequest($request);
我想将变量$content
传递给表单,以便在某些选择框中使用'series'
MagazineType
扩展PublicationType
。底层实体也是如此。以下是MagazineType
的外观:
class MagazineType extends PublicationType
{
function __construct($translator, array $series = null)
{
parent::__construct($translator, $series); //$series);
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
// TODO: Refactor constant out
parent::buildForm($builder, $options)
// ->add('dateSubmitted')
// ->add('userSubmitted')
// ->add('file')
->add('issueNumber')
->add('save', 'submit');
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'Demo\DemoBundle\Entity\Magazine',
'series' => $this->translator->trans('addPublication.noSeries')
)
);
}
和PublicationType
class PublicationType extends AbstractType
{
protected $series, $translator;
public function __construct($translator, $series)
{
$this->translator = $translator;
$this->series = $series;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options){
$builder
->add('name', 'text', array(
'label' => $this->translator->trans('addPublication.name')
))
// ->add('dateSubmitted')
// ->add('userSubmitted')
// ->add('file')
->add('series', 'choice', $this->series);//$formOptions['series']);
;
return $builder;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Demo\DemoBundle\Entity\Publication',
'series' => $this->translator->trans('addPublication.noSeries')
));
}
也许我访问series变量的方式不对,但我甚至没有进一步构造MagazineType(optionseries
not allowed),即使我在DefaultOptions中设置了它,如上所述。我可能在这里遗漏了一些类似的问题,因为我整天都在忙这个
谢谢你的帮助 起初。。。我在FormType类中没有看到方法getName,您设置了吗them@zavalit是的,我只是没有发布它,但它是一个简单的获取工具。我真的不知道为什么需要扩展两次FormType,但我看到的是->添加('series','choice',$this->series),它应该是->添加('series','choice',array('data'=>this->series)@zavalit噢,谢谢!这让我更进一步了。虽然->添加('series','choice',array('data'=>$This->series)给了我一个错误。-->添加('series','choice',array('choices'=>$This->series)的行为非常奇怪(在选择中打印我的css版权注释),但我认为我需要这样做?我需要做什么才能让OptionsResolver实际设置一个空的系列索引?