2016-10-09 3 views
1

몇 가지 도움이 필요합니다. 앱의 사용자 역할을 변경하는 양식을 만들 것입니다.Symfony 3 업데이트 역할 사용자에게 양식

Symfony 3.1.X의 "기본"번들 보안을 사용하고 있습니다.

실제로 DB의 모든 역할을 검색하여 표시 할 수 있지만 데이터를 처리하는 데는 여전히 문제가 있습니다. 양식을 표시 할 때 표시 문제가 계속됩니다. 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 
     )); 
    } 
} 

어떤 생각이있다 :

여기 내 코드입니까?

답변

0

Wel 나는 마침내 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]); 
    }