2012-07-28 17 views
8

aşağıdaki hatayı alıyorum:PHP Ölümcül hata: Benim Symfony2 uygulamasında bir form AbstractType uygulamaya çalışıyorum

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 

değil bu hata alıyorum neden olun. AbstractType :: buildForm() bir FormBuilderInterface alır ve Symfony2 FormBuilder için FormBuilderInterface uygular.

İşte benim Kaynak içeriği var: buildForm üst sınıfında olarak ilan edilmesi gerektiğini, gerçeğini değiştirmez ve FormBuilderInterface uygulayan herhangi bir nesne kabul etmez

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

Gelecekte, kaynağın içine girebilirsiniz. Örneğin, XDebug, dosyaların yerini Symfony/Component/Form olarak verir, tüm bunlar (tam yol, vendor/symfony/src/symfony/...). Daha sonra kolayca 'AbstractType' öğesini bulabilir ve sorunun nedeninin yöntemin imzasını görebilirsiniz. –

cevap

10

FormBuilderInterface, and Symfony2 implements FormBuilderInterface for FormBuilder.

.

+0

Bu yüzden, bir argüman olarak FormBuilderInterface'i kabul ettiğinden, bir FormBuilder'ı ona aktarabileceğin anlamına gelmez mi? –

+1

Yapabilirsin, ama yöntem beyanında 'FormBuilderInterface' kullanmak zorundasın. –

+0

Bir arabirime bağlı bir sınıfı kabul ediyorsanız, bu her zaman böyle midir? – Steven

9

Yani symfony kitaptan kodu aşağıdaki gibi görünmelidir:

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

bu ne demek nedir?

+2

kullanmanız yeterlidir. – cdnicoll

İlgili konular