Forms symfony2表单集合:从预填充列表向集合添加新项
我正在建立一个基本的幻想足球游戏,作为学习symfony2和学说的基础 我在以下实体中有一个合作伙伴:Forms symfony2表单集合:从预填充列表向集合添加新项,forms,symfony,collections,entity,Forms,Symfony,Collections,Entity,我正在建立一个基本的幻想足球游戏,作为学习symfony2和学说的基础 我在以下实体中有一个合作伙伴: 竞赛-举办各种可以参加的竞赛 玩家-保存可为游戏选择的玩家的详细信息 较量 竞赛条目:保存由竞赛ID、用户ID和 球员的选择 我目前正在构建玩家选择页面 我有一个控制器,可以获取可供选择的玩家列表,该列表呈现为一个表,每行有一个按钮,我将使用javascript,以便在单击选择按钮时,它将玩家添加到表单集合中,然后在提交表单时将玩家保存在我的多人表中 不能添加或删除新玩家,只能从可用玩家列
- 竞赛-举办各种可以参加的竞赛
- 玩家-保存可为游戏选择的玩家的详细信息 较量
- 竞赛条目:保存由竞赛ID、用户ID和 球员的选择
{% extends '@Design/Default/layout-main.html.twig' %}
{% block title %}Enter Contest{% endblock %}
{% block stylesheets %}
{{ parent() }}
<link href="{{ asset('bundles/design/css/homebase.css') }}" type="text/css" rel="stylesheet"/>
<link href="{{ asset('bundles/design/css/menu.css') }}" type="text/css" rel="stylesheet"/>
<link href="{{ asset('bundles/design/css/bootstrap.css') }}" rel="stylesheet"/>
{% endblock %}
{% block header %}
{% include 'DesignBundle:Default/Menus:homepage-menu.html.twig' %}
<div class="row">
{% if app.session.flashBag.has('success') %}
<div class="alert alert-success">
<a href="#" class="close" data-dismiss="alert">×</a>
{% for msg in app.session.flashBag.get('success') %}
{{ msg }}
{% endfor %}
</div>
{% endif %}
</div>
<section>
<div class="container">
<div class="row jumbotron color-bkg">
{% include 'GameBundle:Contest/Partial:contest_details.html.partial.twig' %}
<div class="row">
<div class="col-md-6">
<div class="row centered-form">
{{ contest.contestID }}
{{ render(controller('GameBundle:FantasyPlayer:getPlayers', {'contestID': contest.contestID})) }}
</div>
</div>
<div class="col-md-6">
Select Your Team!!
Need to render the contestEntry Form here with the ability to add a player when a player from the list is clicked
In addition each added player will have a remove button to remove the player from the team.
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script type="text/javascript">
</script>
{% endblock %}
为玩家玩家准备的小树枝:
<table class="table table-condensed">
<thead>
<tr>
<th>Position</th>
<th>Player</th>
<th>Opp</th>
<th>Opp Rank</th>
<th>FPPG</th>
<th>Salary</th>
<th></th>
</tr>
</thead>
<tbody>
{% for p in dfp %}
<tr id="player-{{ p.playerID }}" data-player="{'position':'{{ p.position }}', 'salary': '{{ p.salary }}', 'pid': '{{ p.playerID }}'">
<td>{{ p.position }}</td>
<td>{{ p.name }}</td>
<td>{{ p.team }} @ {{ p.opponent }}</td>
<td>{{ p.opponentRank }}</td>
<td>{{ p.opponentPositionRank }}</td>
<td>{{ p.salary }}</td>
<td>
<div class="btn btn-sm btn-default player-select">Select</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
从我在这里读到的其他问题来看,我需要使用一个表单集合
class ContestEntryType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('user', 'hidden')
->add('contest', 'hidden')
->add('locked', 'hidden')
->add('players', 'collection', array(
'type' => 'hidden',
'allow_add' => true)
);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'FantasyPro\GameBundle\Entity\ContestEntry'
));
}
/**
* @return string
*/
public function getName()
{
return 'fantasypro_gamebundle_contestentry';
}
}
我读了symfony表单集合的文档,但理解起来有点困难,因为它似乎没有给出我要做的任何示例,添加了一个带有玩家信息的
,以及一个包含玩家ID的隐藏字段(存储在我的manytomy表中)
谁能给我指点正确的方向吗
/**
* ContestEntry
*
* @ORM\Table(name="fp_contestEntry")
* @ORM\Entity(repositoryClass="FantasyPro\GameBundle\Entity\ContestEntryRepository")
*/
class ContestEntry
{
public function __construct()
{
$this->user = new ArrayCollection();
$this->contest = new ArrayCollection();
$this->players = new ArrayCollection();
}
/**
* @var integer
*
* @ORM\Column(type="integer", name="id")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(type="integer", nullable=true, name="user")
*
*/
private $user;
/**
* @var integer
*
*
* @ORM\ManyToOne(targetEntity="FantasyPro\GameBundle\Entity\Contest", inversedBy="contestEntries")
* @ORM\Column(type="integer", nullable=false, name="contest")
*
*/
private $contest;
/**
*
*
* @ORM\ManyToMany(targetEntity="FantasyPro\DataBundle\Entity\Player", inversedBy="contestEntries")
* @ORM\JoinTable(
* name="Player_ContestEntry",
* joinColumns={@ORM\JoinColumn(name="contestEntryID", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="playerID", referencedColumnName="playerID", nullable=false)}
* )
*/
private $players;
/**
* @var boolean
*
* @ORM\Column(type="boolean", nullable=true, name="locked")
*/
private $locked;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return int
*/
public function getUser()
{
return $this->user;
}
/**
* @param int $user
*/
public function setUser( $user = null )
{
$this->user = $user;
}
/**
* @return int
*/
public function getContest()
{
return $this->contest;
}
/**
* @param int $contest
*/
public function setContest( $contest = null )
{
$this->contest = $contest;
}
/**
* @return int
*/
public function getPlayers()
{
return $this->players;
}
/**
* @param int $players
*/
public function setPlayers( $players = null )
{
$this->players = $players;
}
/**
* @return boolean
*/
public function isLocked()
{
return $this->locked;
}
/**
* @param boolean $locked
*/
public function setLocked( $locked )
{
$this->locked = $locked;
}
}
class ContestEntryType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('user', 'hidden')
->add('contest', 'hidden')
->add('locked', 'hidden')
->add('players', 'collection', array(
'type' => 'hidden',
'allow_add' => true)
);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'FantasyPro\GameBundle\Entity\ContestEntry'
));
}
/**
* @return string
*/
public function getName()
{
return 'fantasypro_gamebundle_contestentry';
}
}