2012-07-28 11 views
8

me sale el siguiente error:PHP Fatal error: Estoy tratando de implementar un formulario AbstractType en mi aplicación 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 
No

seguro de por qué estoy recibiendo este error. AbstractType :: buildForm() toma una FormBuilderInterface, y Symfony2 implementa FormBuilderInterface para FormBuilder.

Aquí está el contenido de mi Fuente:

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

En el futuro, puede profundizar en la fuente. Por ejemplo, XDebug proporciona la ubicación de los archivos como Symfony/Component/Form, que es donde están todos (la ruta completa es vendor/symfony/src/symfony/...). A continuación, puede encontrar fácilmente 'AbstractType' y ver cuál es la causa del problema en la firma del método. –

Respuesta

10

FormBuilderInterface, and Symfony2 implements FormBuilderInterface for FormBuilder.

eso no cambia el hecho de que buildForm tiene que ser declarado en la clase padre y aceptar cualquier objeto que implemente FormBuilderInterface.

+0

Entonces, simplemente porque acepta FormBuilderInterface como argumento, ¿no significa que puede pasarle un FormBuilder? –

+1

Puede hacerlo, pero en la declaración de método debe usar 'FormBuilderInterface'. –

+0

¿Es siempre el caso si acepta una clase que está vinculada a una interfaz? – Steven

9

Así que el código del libro de symfony debería tener este aspecto:

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

es esto lo que quiere decir?

+2

Solo quiero confirmar que esto es correcto – cdnicoll

Cuestiones relacionadas