簡體   English   中英

Symfony 3使用表單更新角色用戶

[英]Symfony 3 update roles user with form

我需要一些幫助,我會創建一個表單來更改應用程序中用戶的角色。

我正在使用Symfony 3.1.X的“默認”捆綁安全性。

實際上我可以檢索數據庫中的所有角色並顯示它們,我也對數據做了一些處理,但我仍然堅持顯示問題,當我顯示表單時,Twig包繼續顯示一些已在下面顯示的標簽。

我怎樣才能解決這個問題 ?

這是我的代碼:

顯示模板

    {% extends 'admin/base.admin.html.twig' %}

   {% block body %}
    <section class="container">
        {{ user.pseudo }} | 

        {{ dump(user, form.roles) }}
        {{ form_start(form) }}
        {% for role in user.roles %}
            {% if form.roles.children[role] is defined %}
                {{ form_label(form.roles.children[role]) }}
                {{ form_widget(form.roles.children[role], {'attr':{'checked':true}}) }}
            {% else %}
                {{ form_label(form.roles) }}
                {{ form_widget(form.roles) }}
            {% endif %}
        {% endfor %}
        {{ form_end(form) }}
    </section>

    <div class="well">
        {% for key, role in form.roles.children %}
            {{ dump(key) }}
        {% endfor %}
    </div>
{% endblock %}

這是我的表格

<?php

namespace AppBundle\Form;

use AppBundle\Entity\MembersEntity;
use AppBundle\Entity\RoleEntity;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ChangeRoleForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('roles', EntityType::class, array(
            'class' => RoleEntity::class,
            'choice_label' => 'nameRole',
            'multiple' => true,
            'expanded' => true,
            'choice_value' => 'nameRole',
        ))
            ->add('update', SubmitType::class);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => null
        ));
    }
}

任何想法 ?

我終於找到了,我從TWIG模板中刪除了條件,它工作正常,我有我想要的,它需要的地方!

我在這里發布用於解決問題的最終代碼:

TWIG模板:

{% extends 'admin/base.admin.html.twig' %}

{% block body %}
    <section class="container">
        {{ user.pseudo }} | 

        {% set formChil = form.roles.children %}

        {{ form_start(form) }}
        {% for role in formChil %}
            {% if role.vars.value in user.roles %}
                {{ form_row(role, {'attr' : {'checked':true}}) }}
            {% else %}
                {{ form_row(role, {'attr' : {'checked':false}}) }}
            {% endif %}
        {% endfor %}

        {{ form_end(form) }}
    </section>
{% endblock %}

表格代碼:

<?php

namespace AppBundle\Form;

use AppBundle\Entity\MembersEntity;
use AppBundle\Entity\RoleEntity;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ChangeRoleForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('roles', EntityType::class, array(
            'class' => RoleEntity::class,
            'choice_label' => 'nameRole',
            'multiple' => true,
            'expanded' => true,
            'choice_value' => 'nameRole',
        ))
            ->add('update', SubmitType::class);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => null
        ));
    }
}

這里是調用模板的方法,以及表單構造:

<?php 

public function editMemberAction($id, Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $user = $this->getDoctrine()->getRepository(MembersEntity::class)->find($id);
        $form = $this->createForm(ChangeRoleForm::class, $user, array('method' => 'PUT'));

        if($request->isMethod('PUT'))
        {
            $form->handleRequest($request);

            $roles = $form->get('roles')->getData();

            $data = array();

            foreach($roles as $role)
            {
                $data[] = $role->getNameRole();
            }

            $user->setRoles($data);

            $em->persist($user);
            $em->flush();
        }

        return $this->render('admin/edit-role-member.html.twig', ['form' => $form->createView(), 'user' => $user]);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM