Коллекции форм Symfony2: добавление нового элемента в коллекцию из заранее заселенного спискаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Коллекции форм Symfony2: добавление нового элемента в коллекцию из заранее заселенного списка

Сообщение Anonymous »

Я создаю базовую игру фэнтезийного футбола в качестве базы для обучения Symfony2 и Dectrine. < /p>

У меня есть следующие объекты: < /p>


Конкурс - проводит различные конкурсы, которые можно ввести < /li>
Player - хранят подробную информацию о игроках, которые можно выбрать для
Конкурс < /li>
Contectentry: хранят конкурсную запись, состоящую из выбора игроков ContestId, пользователя и
. < /li>
< /ul>
Я сейчас строю страницу выбора игрока. Таблица, каждая строка имеет кнопку, я буду использовать JavaScript, чтобы при нажатии кнопки выбора добавила игрока в коллекцию форм, а затем сохранил игрока в моей таблице Mantationy, когда форма отправлена. < Br />
Новые игроки не могут быть добавлены или удалены, они могут быть выбраны только из списка доступных игроков. < /p>

Основная страница для конкурса Вход: < /p>

{% extends '@Design/Default/layout-main.html.twig' %}

{% block title %}Enter Contest{% endblock %}
{% block stylesheets %}
{{ parent() }}



{% endblock %}
{% block header %}
{% include 'DesignBundle:Default/Menus:homepage-menu.html.twig' %}

{% if app.session.flashBag.has('success') %}

×
{% for msg in app.session.flashBag.get('success') %}
{{ msg }}
{% endfor %}

{% endif %}




{% include 'GameBundle:Contest/Partial:contest_details.html.partial.twig' %}



{{ contest.contestID }}
{{ render(controller('GameBundle:FantasyPlayer:getPlayers', {'contestID': contest.contestID})) }}



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.






{% endblock %}
{% block javascripts %}
{{ parent() }}



{% endblock %}
< /code>

Контроллер, который получает список игроков, доступный для выбора: < /p>

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
));

}
< /code>

Шаблон ветки для списка игроков: < /p>




Position
Player
Opp
Opp Rank
FPPG
Salary





{% for p in dfp %}

{{ p.position }}
{{ p.name }}
{{ p.team }} @ {{ p.opponent }}
{{ p.opponentRank }}
{{ p.opponentPositionRank }}
{{ p.salary }}

Select


{% endfor %}


< /code>

Контроллер вызывается в моем шаблоне ветки для участия в конкурсе. (Это однонаправленное, так как мне нужно только получить игроков, которые были назначены для участия в конкурсе) < /p>

/**
* 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;
}
}
< /code>

Из других вопросов, которые я прочитал здесь, мне нужно использовать коллекцию форм. < /p>

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';
}
}
< /code>

Я прочитал документы о коллекциях форм симфони < /code> с информацией игроков вместе со скрытым полем, содержащим PlayerId (для хранения в моей таблице Mantomomany). < /P>

может кто -нибудь дать мне немного указатели в правильном направлении?

Подробнее здесь: https://stackoverflow.com/questions/335 ... pulated-li
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»