Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][SF][SF2]Metoda niekompatybilna z implementowanym interfejsem
amii
post
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


Utworzyłem sobie instancje formularza nadpisującą domyślny form rejestracji z FOSUserBundle:

  1. <?php
  2.  
  3. namespace PortalSlubny\MainBundle\Form\Type;
  4.  
  5. use Symfony\Component\Form\FormBuilder;
  6. use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
  7.  
  8. class RegistrationFormType extends BaseType
  9. {
  10. public function buildForm(FormBuilderInterface $builder, array $options)
  11. {
  12. parent::buildForm($builder, $options);
  13.  
  14. // add your custom field
  15. $builder->add('who', array(
  16. 'choices' => array(0 => 'Użytkownik', 1 => 'Wystawca'),
  17. 'label' => '',
  18. 'empty_data' => 0,
  19. 'required' => true,
  20. )
  21. );
  22. }
  23.  
  24. public function getName()
  25. {
  26. return 'custom_user_registration';
  27. }
  28. }


Po uruchomieniu rejestracji mam:
FatalErrorException: Compile Error: Declaration of PortalSlubny\MainBundle\Form\Type\RegistrationFormType::buildForm() must be compatible with that of Symfony\Component\Form\FormTypeInterface::buildForm() in /home/piotr/public_html/slub/src/PortalSlubny/MainBundle/Form/Type/RegistrationFormType.php line 9

Sprawdziłem plik: vendor/symfony/symfony/src/Symfony/Component/Form/FormTypeInterface.php i funkcja w interfejsie jest deklarowana tak samo, chociaż nie była bo było wczesniej w mojeje klasie FormBuilder ale po zmienie nadal mam błąd.
  1. public function buildForm(FormBuilderInterface $builder, array $options);


EDIT: ok nieważne trzeba było zmienić na
  1. use Symfony\Component\Form\FormBuilderInterface;

ale pojawił się nowy problem:
Expected argument of type "string or Symfony\Component\Form\FormTypeInterface", "array" given

Ten post edytował amii 28.07.2013, 13:10:44
Go to the top of the page
+Quote Post
redeemer
post
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


Jako drugi argument w $builder->add powinieneś przekazać obiekt implementujący FormTypeInterface lub string (np. 'textarea', 'checkbox' itp) a nie tablicę (to się przekazuje w trzecim argumencie). Tak wygląda deklaracja tej metody w FormBuilderInterface:
  1. /**
  2.   * Adds a new field to this group. A field must have a unique name within
  3.   * the group. Otherwise the existing field is overwritten.
  4.   *
  5.   * If you add a nested group, this group should also be represented in the
  6.   * object hierarchy.
  7.   *
  8.   * @param string|integer|FormBuilderInterface $child
  9.   * @param string|FormTypeInterface $type
  10.   * @param array $options
  11.   *
  12.   * @return FormBuilderInterface The builder object.
  13.   */
  14. public function add($child, $type = null, array $options = array());
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 05:24