我正在尝试为对象集合创建自定义表单类型,以便我可以以特定方式呈现它。
作为一个可以理解的例子,我有一个User
,每个都有可变数量的Car
个对象。 User
可以(可选)还有一个Information
对象与之关联。对于此示例,这包括:
用户的汽车也按它们的速度和重量来排名。所以数据库将表示如下:
class Review
{
// The user this feedback refers to.
/**
* @ORM\OneToOne(targetEntity="User")
*/
private $user;
private $age;
private $height;
/**
* @ORM\OneToMany(targetEntity="CarRanking", inversedBy="review")
*/
private $car_rankings;
//...
}
class CarRanking
{
/**
* @ORM\ManyToOne(targetEntity="Review", mappedBy="car_rankings")
*/
private $review;
/**
* The car this ranking is for.
* @ORM\OneToOne(targetEntity="Car")
*/
private $car;
// These are both rankings, from 1 to however many cars the user owns.
private $speed;
private $weight;
//...
}
所以完整的评论可能是这样的:
'鲍勃' - 年龄:35岁,身高:180,年
车1 - 速度:1,重量:3,
车2 - 速度:2,重量:1,
车3 - 速度:3,重量:2
我很难通过Symfony的表单向用户提供表单。理想情况下,我想生产这样的东西:
input, label {
display: block;
}
<form>
<label>How old is this person?</label>
<input type="number" id="age" />
<label>How tall are they?</label>
<input type="number" id="height" />
<label>Please rank their cars by speed</label>
<select id="car_rankings_speed_0">
<option value="">-</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
</select>
<select id="car_rankings_speed_1">
<option value="">-</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
</select>
<select id="car_rankings_speed_2">
<option value="">-</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
</select>
<label>Please rank their cars by weight</label>
<select id="car_rankings_weight_0">
<option value="">-</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
</select>
<select id="car_rankings_weight_1">
<option value="">-</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
</select>
<select id="car_rankings_weight_2">
<option value="">-</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
</select>
</form>
我尝试创建不同的类型来完成此操作,包括collection
RankingType
个,这只是一个花哨的select
来初始化正确的项目数。但是每个CarRanking都是乘车而不是重量或速度。
我也试过创建一个CarRankingType
,但需要以某种方式获取基础数据,当我拥有它时,我不确定我会用它做什么。
有没有一种特殊方法可以实现这一目标,还是采取其他一些方式来实现这一目标?我对Symfony的形式并不开心。