目前,我在某些表单中使用自定义类型,基本上成为了实体的#id;"和"实体到id"感谢bjo3rnf,但我不希望每次class
传递,以及懒惰和其他问题。
我知道当我向FormBuilder添加一个字段并在类型symfony中传递null猜测正确的类型时,我认为它是使用主窗体的属性data_class
我想做同样的猜测正确的课程,但我不知道如何访问父data_class
@jamek answer可以处理其他人失败的情况
示例:
use Doctrine\ORM\Mapping as ORM;
class Person {
/**
* @var int
* @ORM\Id()
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var string
* @ORM\Column(length=150, type="string")
*/
protected $name;
/**
* @var City
* @ORM\ManyToOne(targetEntity="City")
*/
protected $city;
}
class City {
/**
* @var int
* @ORM\Id()
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var string
* @ORM\Column(length=150, type="string")
*/
protected $name;
}
当我想创建新对象时,在控制器中
$object = new Person();
$form = $formFactory->create(new PersonType(), $object);
$form->submit($request); // here fails because cant convert city_id to City object
仅适用于存在的对象
$object = $manager->find('Person', $id);
$form = $formFactory->create(new PersonType(), $object);
$form->submit($request); // here works fine property is a object and the code get_class($builder->getData()) get the correct City class
答案 0 :(得分:4)
如果我理解你想要你应该改变buildForm方法:
$transformer = new EntityToIdTransformer($this->objectManager, $options['class']);
到
$transformer = new EntityToIdTransformer($this->objectManager, get_class($builder->getData()));
并从类
的Option解析器中删除所需的内容答案 1 :(得分:1)
您可以在Person类
中添加构造
class Person {
...
public function __construct()
{
$this->city = new City();
}
}