是否可以从2个连接的实体对象构建表单?
我有两个实体property
& propertylanguage
加入onetomany关系。
(一个属性可以有多种语言)
语言有title
和description
个colomns。
所以一个房产可以有英文,法文,德文标题。
我正在尝试构建一个表单。 见下文。
控制器: addProperty.php
class AddPropertyController extends Controller
{
// ....
public function indexAction(Request $request)
{
$property = new property;
$language = new propertyLanguage;
$property ->addpropertylanguage($language);
$form = $this->createForm(new propertyType($this->getDoctrine()),$property);
// .....
}
表单类型:propertType.php
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('title', 'text');
// other ->add() below.
}
它返回以下错误:
既不是属性“title”也不是方法“getTitle()”也不是方法 “isTitle()”存在于类“\ defaultBundle \ Entity \ property”
中
当然,属性中没有属性Title,但是propertylanguage中有一个属性。 即使我尝试: - > add('title','entity',array('class'=> defaultBundle:propertylanguage)); 它不起作用。
谢谢,如果你有时间帮助我。
最佳,
皮尔。
答案 0 :(得分:1)
您要做的是创建一个PropertyLanguageType类以及一个PropertyType。
然后,在PropertyType中,您将嵌入PropertyLanguageType:
public function buildForm(FormBuilder $builder, array $options)
{
// $builder->add('propertyLanguage', new PropertyLanguageType());
// Since we have a 1 to many relation, then a collection is needed
$builder->add('propertyLanguage', 'collection', array('type' => new PropertyLanguageType()));
PropertyLanguageType是您添加标题的位置。
这些都在手册的表格部分,但可能需要多次阅读。
第二种方法是将getTitle添加到Property实体,该实体将从PropertyLanguage实体返回标题。通过这样做,您的原始表单将起作用。但是当你开始拥有多个属性的多个关联时,它可能会有点混乱。最好只为每个实体定义一个类型。
答案 1 :(得分:0)
您可以在定义表单时使用query_builder。这是表单类的外观。当然,它肯定不会如此,但这会给你一个良好的开端;)
public function __construct($id)
{
$this->propertylanguageId = $id;
}
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('propertylanguage', 'entity', array(
'label' => 'Property Language',
'class' => 'YourAdressToBundle:Propertylanguage',
'query_builder' => function(EntityRepository $er) use ($propertylanguageId) {
return $er->createQueryBuilder('p')
->join('p.property', 'prop', Expr\Join::WITH, 'prop.id = :propertylanguageId')
->setParameter('propertylanguageId', $propertylanguageId);
},
));
}
希望这会有所帮助