我正在建立一个基本的梦幻足球游戏,作为学习symfony2和教义的基础。
我有以下实体:
我正在构建播放器选择页面。
我有一个控制器,可以获取可供选择的可用玩家列表,该列表呈现为一个表格,每一行都有一个按钮,我将使用javascript,这样当点击选择按钮时,它会将玩家添加到表单中收集,然后在提交表单时将播放器保存在我的ManyToMany表中。
无法添加或删除新玩家,只能从可用玩家列表中选择。
参赛作品的主页:
{% 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 %}
获取可供选择的玩家列表的控制器:
class FantasyPlayerController extends Controller
{
public function getPlayersAction($contestID)
{
$em = $this->get('doctrine.orm.entity_manager');
//get the repos
$contestRepo = $em->getRepository('GameBundle:Contest');
$scheduleGroupRepo = $em->getRepository('GameBundle:ScheduleGroup');
$playerRepo = $em->getRepository('DataBundle:DailyFantasyPlayer');
$contest = $contestRepo->find($contestID);
//var_dump($contest);die();
//get the ScheduleGroup
$scheduleGroup = $contest->getScheduleGroup();
//var_dump($scheduleGroup);die();
//get schedules
$schedules = $scheduleGroupRepo->getScheduleGroup($scheduleGroup);
//var_dump($schedules);die();
//get teams playing in schedules
$teamsArray = array();
foreach($schedules as $schedule){
$hometeam = $schedule->getHomeTeam();
$awayteam = $schedule->getAwayTeam();
array_push($teamsArray, $hometeam);
array_push($teamsArray, $awayteam);
}
//Get players matching the teams
$dfp = $playerRepo->getAvaliablePlayersByTeam($teamsArray);
return $this->render('GameBundle:Forms:player-list.html.twig', array(
'dfp' => $dfp
));
}
玩家列表的Twig Tempate:
<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>
在我的树枝模板中调用控制器进入比赛。
我的ContestEntry实体具有ManyToMany Defined(它是单向的,因为我只需要获得已分配到比赛条目的玩家)
/**
* 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';
}
}
我已经阅读了关于symfony表单集合的文档,但我很难理解它,因为它似乎没有提供我正在尝试做的任何示例,添加了<TR>
与玩家信息,以及包含playerID的隐藏字段(存储在我的ManyToMany表中)。
有人可以给我一些正确方向吗?