我创建了一个FormType
,它在data_class
类的默认值中设置为configureOptions
。看起来有点像这样
<?php
namespace tzfrs\AppBundle\Form\Type;
use tzfrs\AppBundle\Model\Car;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Class CarType
* @package tzfrs\AppBundle\Form\Type
*/
class CarType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('specification', ChoiceType::class, [
'choices' => [1 => 1, 2 => 2, 3 => 3]
]);
}
/**
* @inheritdoc
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Car::class
]);
}
}
当我现在创建这样的表格时
$carForm = $this->createForm(CarType::class, $car);
并想使用它我收到以下错误:
“object”类型的值无法转换为有效的数组键。
我认为原因是因为我的Car
类有一个带有getter / setter的属性specification
,因此返回一个Specification
对象。但是,我的Specification
对象有__toString()
方法。
Car.php
/**
* @var Specification
*/
protected $specification;
public function getSpecification(): Specification
{
return $this->specification;
}
public function setSpecification(Specification $specification): Car
{
$this->specification = $specfification;
return $this;
}
Specification.php
/**
* Returns a string implementation of the current class
*
* @return string
*/
public function __toString(): string
{
return sprintf(
'HP: %s,CCM: %s',
$this->getHorsePower(),
$this->getCapacity()
);
}
如何覆盖使用自定义模型的表单字段的选择?我不能使用EntityType
,因为它不是一个学说模型。
当我像这样构建我的表单时
$carForm = $this->createForm(Car::class);
然后它可以工作,但是我需要Form中的Car
对象,因为我在buildForm
方法中添加了另一个字段