这不是一个问题,而是我注意到并希望更好地理解的东西。
我有一个Poll
类,其中包含votes
和pollOptions
的集合。
我的PollOption
班级拥有poll
所属的title
和Vote
。
poll
类还包含其所属的voteChoices
,以及自己的user
和VoteChoice
集合。
vote
类包含其所属的answer
,投票所需的PollOption
(priority
)以及Vote
。
我有一个包含表单集合的表单(VoteChoice
有很多VoteChoiceType
)
class VoteChoiceType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('answer', null, array('disabled' => true))
->add('priority', null);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'PollBundle\Entity\VoteChoice',
));
}
}
如下
VoteController
现在在Vote
我创建并填充了voteChoices
个answer
,根据当前投票的可用选项(从网址派生)设置$vote = new Vote();
$vote->setPoll($poll);
foreach ($vote->getPoll()->getPollOptions() as $op) {
$vc = New VoteChoice();
$vote->addVoteChoice($vc->setAnswer($op));
}
)
<ul class="voteChoices" data-prototype="{{form_widget(form.voteChoices.vars.prototype)|e('html_attr') }}">
{% for voteChoice in form.voteChoices %}
<li>{{ voteChoice.vars.value.answer }} {{ form_row(voteChoice.priority) }}</li>
{% endfor %}
</ul>
</div>
<p><button type="submit" class="btn btn-success">Go!</button></p>
{{ form_end(form) }}
所以我的枝条如下
answer
但是,如果我在VotechoiceType
中启用{{ form_row(voteChoice.answer) }}
,并且在我的游戏中添加VoteChoice
,我会在表格中注意到所有我的投票选项可选列表,即使它们是另一个民意调查的一部分。
这是为什么?如何才能显示投票所属的民意调查中可用的选项?我的怀疑是我没有正确处理PollOption
和Poll
之间的关系(多对一)。如果我在这里犯了错误,我可能已经在其他地方做过了(例如Vote
可能会获得数据库中的每个// Construct a new array of the stripped numbers
$flattenedArray = array_map(function($item) {
list(, $number) = explode(' ', $item['b_title']);
return $number;
}, $yourArray);
// Concatenate the numbers into a string joined by ,
$out = implode(', ', $flattenedArray);
而不是属于它的那些{/ p>}
答案 0 :(得分:2)
$builder->add('answer', null, array('disabled' => true))
为PollOption
创建一个ChoiceType-Field,默认情况下会使用所有PollOption填充它。没有任何限制选择字段,因为您的表单不知道通过$voteChoice->getVote()->getPolloptions()
给出的期望限制。
看看Symfonys EntityType Field:query_builder
选项可以为您提供一种方法来解决您的问题,方法是在答案字段中添加自定义查询,该字段选择通过以下方式更正PollOptions的子集VoteChoice -> Vote -> Polloptions
关系。