Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][SF][SF2]Metoda niekompatybilna z implementowanym interfejsem
Forum PHP.pl > Forum > PHP > Frameworki
amii
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
redeemer
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());
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.