2016-10-09 7 views
1

私はいくつかの助けが必要です、私はアプリケーション内のユーザーの役割を変更するフォームを作成します。symfony 3の更新のロールフォームのユーザー

私はSymfony 3.1.Xの「デフォルト」のバンドルセキュリティを使用しています。

実際に私はDB内のすべての役割を取得して表示することができますが、私はデータについても扱いますが、私はまだ表示上の問題を抱えています。フォームを表示すると、既に下に表示されています。

どうすればこの問題を解決できますか?

表示テンプレート

{% 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テンプレートから条件を削除しましたが、うまくいきました。私は欲しいものがあり、必要な場所があります。私はここに使用される最終的なコードを投稿

は、問題を解決:

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