为symfony2编写自定义集合表单类型

时间:2015-07-18 18:56:24

标签: php forms symfony doctrine symfony-forms

我正在尝试为对象集合创建自定义表单类型,以便我可以以特定方式呈现它。

作为一个可以理解的例子,我有一个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的形式并不开心。

0 个答案:

没有答案