2012-07-28 11 views
8

pojawia się następujący błąd:PHP Fatal error: Próbuję zaimplementować Form AbstractType w mojej aplikacji Symfony2

Fatal error: Declaration of Bean\OauthServerBundle\Form\Type\AuthorizeFormType::buildForm() must be compatible with Symfony\Component\Form\FormTypeInterface::buildForm(Symfony\Component\Form\FormBuilderInterface $builder, array $options) in src/Bean/OauthServerBundle/Form/Type/AuthorizeFormType.php on line 25 

Nie wiem, dlaczego ja dostaję ten błąd. AbstractType :: buildForm() pobiera FormBuilderInterface, a Symfony2 implementuje FormBuilderInterface for FormBuilder.

Oto treść mojego Źródło:

<?php 
namespace Bean\OauthServerBundle\Form\Type; 

use Symfony\Component\Form\FormBuilder; 
use Symfony\Component\Form\AbstractType; 

class AuthorizeFormType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     /* some code ... */ 
    } 

    /* more code ... */ 
} 
+0

W przyszłości możesz zagłębić się w źródło. Na przykład XDebug podaje lokalizację plików jako Symfony/Component/Form, czyli tam gdzie one są (pełna ścieżka to vendor/symfony/src/symfony/...). Następnie można łatwo znaleźć "AbstractType" i zobaczyć, co jest sygnaturą metody, która jest przyczyną problemu. –

Odpowiedz

10

FormBuilderInterface, and Symfony2 implements FormBuilderInterface for FormBuilder.

To nie zmienia faktu, że buildForm musi zostać zadeklarowana jako w klasie nadrzędnej i przyjąć dowolny obiekt, który implementuje FormBuilderInterface.

+0

Więc tylko dlatego, że akceptuje FormBuilderInterface jako argument, nie oznacza, że ​​można przekazać do niego FormBuilder? –

+1

Możesz, ale w deklaracji metody musisz użyć 'FormBuilderInterface'. –

+0

Czy tak jest zawsze, jeśli akceptujesz klasę, która jest związana z interfejsem? – Steven

9

Więc kod z symfony książki powinien wyglądać następująco:

namespace Bean\OauthServerBundle\Form\Type; 

use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\Form\AbstractType; 

class AuthorizeFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     /* some code ... */ 
    } 

    /* more code ... */ 
} 

jest to, co masz na myśli?

+2

Chcę tylko potwierdzić, że to jest poprawne – cdnicoll

Powiązane problemy