2012-07-28 13 views
8

ottengo il seguente errore:PHP Fatal error: Sto cercando di implementare un modulo AbstractType nella mia applicazione 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 

Non so perché sto ottenendo questo errore. AbstractType :: buildForm() prende un oggetto FormBuilderInterface e Symfony2 implementa FormBuilderInterface per FormBuilder.

Ecco il contenuto del mio Fonte:

<?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

In futuro, è possibile approfondire la fonte. Ad esempio, XDebug fornisce il percorso dei file come Symfony/Component/Form, che è dove si trovano tutti (il percorso completo è vendor/symfony/src/symfony/...). È quindi possibile trovare facilmente 'AbstractType' e vedere qual è la firma del metodo che sta causando il problema. –

risposta

10

FormBuilderInterface, and Symfony2 implements FormBuilderInterface for FormBuilder.

Questo non cambia il fatto, che buildForm deve essere dichiarato come in classe genitore e accettare qualsiasi oggetto che implementa FormBuilderInterface.

+0

Quindi, solo perché accetta FormBuilderInterface come argomento, non significa che è possibile passare ad un FormBuilder? –

+1

Puoi, ma nella dichiarazione del metodo devi usare 'FormBuilderInterface'. –

+0

È sempre così se si accetta una classe collegata a un'interfaccia? – Steven

9

Quindi il codice dal libro symfony dovrebbe essere così:

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 ... */ 
} 

è questo che vuoi dire?

+2

Voglio solo confermare che questo è corretto – cdnicoll

Problemi correlati