2016-04-18 39 views
1

我想創建一個可以在symfony2和symfony3中使用的新表單類型。問題是,它擴展實體形式,類型和我無法找到創建的getParent()函數的一個常見方式,因爲在Symfony2的是這樣的:在symfony2和3中擴展表格

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

和symfony3:

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

有什麼辦法可以用普通的方式來做,或者我需要創建兩種不同的表單類型?

回答

0

您可以檢查是否在AbstractType類的getBlockPrefix()方法確實存在這是在Symfony的2.8介紹:

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

我在@igor-pantovic的評論中看到您的觀點,但您的解決方案無法正常工作。 – abdiel

+0

你對「不起作用」是什麼意思?你有錯誤嗎? – xabbuh

+0

我的錯誤經過一番研究後發現,您的解決方案適用於舊的和廣泛使用的捆綁包https://github.com/craue/CraueFormFlowBundle/blob/master/Form/Extension/FormFlowFormExtension.php。然後我檢查我的代碼並找到我的錯誤。謝謝 – abdiel

1

您可以讀取內核版本,並適當地返回父:

use Symfony\Component\HttpKernel\Kernel; 

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

這將無法工作的原因有兩個:安裝的HttpKernel組件和Form組件的版本不必相同。其次,第一種情況(只與Symfony 3一起使用)和Symfony 2.8一起使用也不會得到棄用警告。 – xabbuh