Symfony2 如何将父 formType 包含到另一个
Symfony2 how to include a parent formType into another
我正在为某些领域写一个包。
现在我得到了一个可以扩展的 class。
class 有一些字段,例如头衔、姓名等
现在我想写一个 formType,它可以被另一个 formType 扩展。
喜欢
class newsgroupType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('unusername','text',array(
'required' => true))
->add('unactive','checkbox',array(
'required' => false));
...
我要扩展的 FormType 是
class mainType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('unurl','text',array(
'required' => false,
'disabled' => true))
->add('untitle','text',array(
'required' => false))
...
有没有办法扩展 mainType 以将所有字段从它获取到我的新闻组类型中?
非常感谢=)
我觉得你应该有不同的看法。
您可以使用嵌套表单类型来完成您想要的操作。
例如:
class newsgroupType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('main', new MainType())
->add('unusername','text',array(
'required' => true))
->add('unactive','checkbox',array(
'required' => false));
...
您还应该以正确的方式命名您的 类,使用 CamelCase (在我的示例中,使用 MainType 而不是 mainType)
Symfony 网站上有一个 cookbook article,它给出了如何将公共字段提取到单独的表单定义中的示例,然后可以将其包含到其他表单定义中。
创建一个单独的 Form
class,其中包含使用构建器的公共字段。然后,您可以使用 inherit_data
选项配置该表单:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'inherit_data' => true
));
}
然后其他表单可以在构建器中添加该表单:
public function buildForm(FormBuilderInterface $builder, array $options)
{
// ...
$builder->add('foo', new CommonType(), array(
'data_class' => 'AppBundle\Entity\Foo'
));
}
我正在为某些领域写一个包。 现在我得到了一个可以扩展的 class。 class 有一些字段,例如头衔、姓名等
现在我想写一个 formType,它可以被另一个 formType 扩展。
喜欢
class newsgroupType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('unusername','text',array(
'required' => true))
->add('unactive','checkbox',array(
'required' => false));
...
我要扩展的 FormType 是
class mainType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('unurl','text',array(
'required' => false,
'disabled' => true))
->add('untitle','text',array(
'required' => false))
...
有没有办法扩展 mainType 以将所有字段从它获取到我的新闻组类型中?
非常感谢=)
我觉得你应该有不同的看法。
您可以使用嵌套表单类型来完成您想要的操作。
例如:
class newsgroupType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('main', new MainType())
->add('unusername','text',array(
'required' => true))
->add('unactive','checkbox',array(
'required' => false));
...
您还应该以正确的方式命名您的 类,使用 CamelCase (在我的示例中,使用 MainType 而不是 mainType)
Symfony 网站上有一个 cookbook article,它给出了如何将公共字段提取到单独的表单定义中的示例,然后可以将其包含到其他表单定义中。
创建一个单独的 Form
class,其中包含使用构建器的公共字段。然后,您可以使用 inherit_data
选项配置该表单:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'inherit_data' => true
));
}
然后其他表单可以在构建器中添加该表单:
public function buildForm(FormBuilderInterface $builder, array $options)
{
// ...
$builder->add('foo', new CommonType(), array(
'data_class' => 'AppBundle\Entity\Foo'
));
}