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
之前运行