在 symfony2 和 3 中扩展表单

Extend forms in symfony2 and 3

我想创建一个可以在 symfony2 和 symfony3 中使用的新表单类型。问题是它扩展了实体表单类型,我找不到创建 getParent() 函数的通用方法,因为在 symfony2 中就像:

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

在 symfony3 中:

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

有什么通用的方法吗,或者我需要创建两种不同的表单类型?

您可以从内核中读取版本,并且 return 父级适当地:

use Symfony\Component\HttpKernel\Kernel;

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

您可以检查 AbstractType class 中的 getBlockPrefix() 方法是否存在,该方法在 Symfony 2.8 中引入:

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