Php 将参数传递到Symfony 3表单配置选项

Php 将参数传递到Symfony 3表单配置选项,php,forms,symfony,Php,Forms,Symfony,我有以下表格: class TestFormType extends AbstractType { protected $testArgument; public function buildForm(FormBuilderInterface $builder, array $options) { if (isset($options['testArgument'])) { $this->testArgument = $op

我有以下表格:

class TestFormType extends AbstractType
{
    protected $testArgument;

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if (isset($options['testArgument'])) {
            $this->testArgument = $options['testArgument'];
        }

        $builder->add('textField', 'Symfony\Component\Form\Extension\Core\Type\TextType');
    }

    public function configureOptions(OptionsResolver $optionsResolver)
    {
        $optionsResolver->setRequired('testArgument');

        $optionsResolver->setDefaults(
            array(
                'data_class' => get_class($this->testArgument)
            )
        );
    }
}

我正在通过表单选项(Symfony 3修改)传递
testArgument
属性的值,但是在
configureOptions
方法中设置
'data\u class'
属性的类名时,它总是
null
。基本上,我需要依赖
configureOptions
方法中的表单类型类属性。有人能帮我找到正确的方向吗?

我必须从表单工厂
create
方法本身传递
configureOptions
方法中的依赖项:

$form = $this->factory->create(
            'app\TestBundle\Form\Type\TestFormType',
            $this->testArgument,
            array(
                'data_class' => get_class($this->testArgument)
            )
        );
因为它不会被表单类型中的默认设置设置,因此必须按照如下方式重构表单类型类:

class TestFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('textField', 'Symfony\Component\Form\Extension\Core\Type\TextType');
    }
}

您应该将*Type\uu构造函数传递给

use App\Entity\Blog;  
use Symfony\Component\Form\AbstractType;  
use Symfony\Component\OptionsResolver\OptionsResolver;

class BlogType extends AbstractType {

    private $someDependency;

    public function __construct($someDependency)
    {
        $this->someDependency = $someDependency;
    }
    // ...

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'empty_data' => new Blog($this->someDependency),
        ]);
    } }

根据php文档
get_class
返回
object
为实例的类的名称。如果对象不是对象,则返回
FALSE
。如果在类中省略对象,则返回该类的名称。可能
get\u class
返回false,因为您没有向其传递对象。非常确定在buildForm之前会调用configureOptions。可能会添加一些die语句以进行确认。更重要的是,表单系统只创建一个特定类型的对象。因此,如果您计划使用两个不同的这种类型的实例,每个实例都有不同的数据类,那么它根本不起作用。@MohammadZareMoghadam:它总是返回
“TestFormType”
,因为
configureOptions
buildForm
之前运行