2016-08-25 64 views
0

試圖延長SubmitType擴展SubmitType對映射形式使用

class ValidateType extends AbstractType 
{ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'label' => 'Valider', 
      'mapped' => false, 
      'attr' => array(
       'class' => 'btn-lg btn-success btn-block', 
      ), 
     )); 
    } 

    public function getParent() 
    { 
     return SubmitType::class; 
    } 
} 

使用到映射形式

class SecurityFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      // ... 
      ->add('validate', ValidateType::class, array('mapped' => false)) 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => Item::class 
     )); 
    } 
} 

告訴我

無論是財產 「驗證」也不存在「getValidate()」,「validate()」,「isValidate()」,「hasValidate()」,「__get()」方法,並且在類「AppBundle \實體\項目」。

我做錯了什麼?
有沒有辦法擴展SubmitType

+0

你定義你的自定義字段類型的服務? – DOZ

+0

不,我爲什麼要?我沒有試圖做一個[擴展](https://symfony.com/doc/current/form/create_form_type_extension.html),只是一個自定義的表單類型 –

+0

的確,你是對的 – DOZ

回答

1

對於這種情況,您不需要使用mapped屬性。相反,使用的界面SubmitButtonTypeInterface

ValidateType:

use Symfony\Component\Form\Extension\Core\Type\SubmitType; 

class ValidateType extends AbstractType implements SubmitButtonTypeInterface 
{ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'label' => 'Valider', 
      'attr' => [ 
       'class' => 'btn-lg btn-success btn-block', 
      ], 
     ]); 
    } 

    public function getParent() 
    { 
     return SubmitType::class; 
    } 
} 

SecurityFormType:

$builder 
    // ... 
    ->add('validate', ValidateType::class)