2016-04-18 4 views
1

Ich möchte einen neuen Formulartyp erstellen, der in symfony2 und symfony3 verwendet werden kann. Das Problem ist, dass es Entitätsformular Art erweitern und ich kann nicht einen gemeinsamen Weg von schaffen die getParent() Funktion, da in Symfony2 ist wie finden:Erweitern Formulare in symfony2 und 3

public function getParent() 
{ 
    return 'entity'; 
} 

und in symfony3:

public function getParent() 
{ 
    return EntityType::class; 
} 

Es gibt eine Möglichkeit, es auf eine allgemeine Weise zu tun, oder ich muss zwei verschiedene Formulartypen erstellen?

Antwort

0

Sie überprüfen können, ob die getBlockPrefix() Methode in der AbstractType Klasse existiert, die in Symfony 2.8 eingeführt wurde:

if (method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix')) { 
    return EntityType::class; 
} else { 
    return 'entity'; 
} 
+0

Ich sehe Ihren Punkt im Kommentar zu @ igor-pantovic, aber Ihre Lösung funktioniert nicht. – abdiel

+0

Was meinst du mit "es funktioniert nicht"? Erhalten Sie einen Fehler? – xabbuh

+0

Mein Fehler, nach ein wenig Forschung, finden Sie, dass Ihre Lösung für ein altes und umfangreiches verwendetes Bündel https://github.com/craue/CraueFormFlowBundle/blob/master/Form/Extension/FormFlowFormExtension.php funktioniert. Dann überprüfe ich meinen Code und finde meinen Fehler. Vielen Dank – abdiel

1

Sie könnten Version von Kernel lesen, und das Rück Eltern entsprechend:

use Symfony\Component\HttpKernel\Kernel; 

public function getParent() 
{ 
    if (Kernel::MAJOR_VERSION > 2) { 
     return EntityType::class; 
    } else { 
     return 'entity'; 
    } 
} 
+0

Diese funktioniert aus zwei Gründen nicht: Die installierten Versionen der HttpKernel-Komponente und der Form-Komponente müssen nicht identisch sein. Zweitens sollte der erste Fall (der nur mit Symfony 3 mit Ihrem Code verwendet wird) auch mit Symfony 2.8 verwendet werden, um keine veralteten Warnungen zu erhalten. – xabbuh