【发布时间】:2020-02-06 21:46:04
【问题描述】:
我有点担心 Symfony 4 上的表单!事实上,我有一个显示组的页面。在这些组中,有一个是默认组。我有权删除群组。但是如果我决定删除默认组,我会有一个模式窗口,它会要求我同时选择一个新的默认组。这就是放置的上下文。现在我将说明问题^^ 所以我创建了我的表单,它将包含除了默认组之外的所有组的列表
表单(DeleteDefaultGroupeType):
class DeleteDefaultGroupeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('defaultGroupeValidateurs', ChoiceType::class, [
'label' => "Service par défaut",
'placeholder' => "Sélectionnez un service",
'choices' => $options['groupeValidateursService']->getNotDefaultGroups(),
'choice_label' => function ($choice, $key, $value) {
return $choice->getNom();
}
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => ParametresAdmin::class,
'groupeValidateursService' => GroupeValidateursService::class,
]);
}
}
在我的控制器的 index () 函数中,我初始化了这个表单并作为参数发送到我的视图。然后在我看来,如果我想删除默认组,我会启动一个模式窗口。很好,我的模态窗口默认允许我选择一个新组!
控制器(索引函数):
$formDeleteDefaultGroupe = $this->createForm(DeleteDefaultGroupeType::class, $parametresAdmin, [
"groupeValidateursService" => $this->groupeValidateursService
]);
$formDeleteDefaultGroupe->handleRequest($request);
在我的 Twig 视图中,我插入了模态:
<button class="btn close" data-target="#deleteModal{{groupe.id}}" data-toggle="modal" type="button">
<span aria-hidden="true">×</span>
</button>
{% if groupe == parametresAdmin.defaultGroupeValidateurs %}
{{ macro.replace_default_group(
'deleteModal'~groupe.id,
'Delete group ?',
formDeleteDefaultGroupe,
path('admin_validation_delete',{'id': groupe.id}))
}}
{% else %}
还有模式:
{%- macro replace_default_group(id, body, form, deleteLink) -%}
{% filter spaceless %}
<div id="{{ id }}" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
{{form_start(form)}}
<div class="modal-header">
<h4 class="modal-title">Supprimer?</h4>
<button class="close" data-dismiss="modal" type="button">×</button>
</div>
<div class="modal-body">
<p>{{ body }}</p>
{{form_widget(form)}}
</div>
<div class="modal-footer">
<a href="{{ deleteLink }}" class="btn btn-primary">Supprimer</a>
<button class="btn btn-secondary" data-dismiss="modal" type="button">Annuler</button>
</div>
{{form_end(form)}}
</div>
</div>
</div>
{% endfilter %}
{%- endmacro -%}
所以我的表单的动作将在我的控制器的函数 deleteGroupe () 上。他将把他作为他必须删除的组的参数。这个变量就是函数中的groupValidators$groupValidators。所以在我的控制器中,我重新初始化了允许我选择一个新组的表单。如果它被提交,这意味着我试图删除默认组,所以我们必须应用更改。所以我必须恢复表单中提交的内容,即默认的新组
/**
* Suppression d'un groupe de validateurs et transfert des demandes
* en attentes des utilisateurs vers le groupe par défaut
*
* @Route("/admin/validation/delete/{id}", name="admin_validation_delete")
*
* @param GroupeValidateurs $groupeValidateurs
* @return void
*/
public function deleteGroupe(Request $request, GroupeValidateurs $groupeValidateurs)
{
$form = $this->createForm(DeleteDefaultGroupeType::class, new ParametresAdmin(), [
"groupeValidateursService" => $this->groupeValidateursService,
]);
$form->handleRequest($request);
dump($form->getData());
if ($form->isSubmitted() && $form->isValid()) {
$newDefaultGroupe = $form->getData();
dd($newDefaultGroupe);
//Et là je modifie le groupe par défaut
}
dd('fin');
//Et ici je supprime le groupe que je veux supprimer
$this->groupeValidateursService->removeGroup($groupeValidateurs);
return $this->redirectToRoute("admin_validation_index");
}
除了奇怪的是,它没有进入 isSubmitted && isValid。并且如果我在条件之外创建一个 $form->getData() 来查看,那么我碰巧得到了 ParametresAdmin() 对象但为空。没有考虑提交的内容
【问题讨论】:
-
嗨!你检查调试器是否有一些表单错误?
-
您好,请问如何检查调试器?我是初学者
-
没问题 ;) 检查这个symfony.com/doc/current/profiler.html,在左上角你可以访问所有请求,检查你感兴趣的请求
-
嗯,所以我必须附加 Debug::enable();在我的功能中?如果是这样,我在调试中对我的问题一无所知:s
-
感谢您的帮助,我的问题已解决:)
标签: php forms symfony controller