2013-11-15 3 views
1

내보기에서 선택된 그룹의 역할을 표시하기 위해 컨트롤러와 formtype을 재정의하려고 시도하고 있지만 올바른 방법을 찾지 못했습니다. 나는 모든 것을 오버라이드하는 단계를 따라 갔다.하지만 문제는 서비스에 내가 생성자 엔티티 객체를 전달하고 있다고 말할 때 문제가 생긴다.FOSUserBundle은 편집보기에서 그룹 역할을 표시합니다.

양식 유형을 재정의해야하므로 구현해야하는 서비스 인 내 그룹 엔터티를 전달하는 방법은 무엇입니까?

누구나 달성 방법에 대한 아이디어가 있습니까?

  1. 무시 컨트롤러 및 양식을 만들 때 $group 기업

    $formFactory = $this->container->get('fos_user.group.form.factory'); 
    $form = $formFactory->createForm($group); //Here 
    
  2. 재정의 양식을 전달하고 사용자 정의 __construct 방법을 사용 : 여기

    내가 한 일이다 내 사업체를 통과 할 수있는 곳 (아마도 여기에 내 오류가 있으며 더 좋게 또는 다른 방식으로 수행되어야 함)

    public function __construct(Container $container, Groups $group) 
    { 
        $this->container = $container; 
        $this->roles = array_keys($this->container->getParameter('security.role_hierarchy.roles')); 
    
        $this->group = $group; #How? 
    } 
    

역할에 대한 키를 가져 오는 컨테이너가 오류없이 전달되므로 올바르게 작동합니다.

문서가 말한대로
  • 서비스를 만들기

  • 난 정말 그와 돈 쌓인있어 (여기 진짜 문제 및 예외를 제공)

      어떻게 나아갈 지에 대한 생각이 없습니다.

    답변

    4

    의 GroupController.php을 무시하고 내 폼에 선택 필드 유형을 추가 한 후, 나는 나의 목표를 달성 할 수 있었다.

    $form->add('roles', 'choice', array(
           'choices' => $this->getExistingRoles(), 
           'data' => $group->getRoles(), 
           'label' => 'Roles', 
           'expanded' => true, 
           'multiple' => true, 
           'mapped' => true, 
          )); 
    

    경우 getExistingRoles()이다 :

    $roleHierarchy = $this->container->getParameter('security.role_hierarchy.roles'); 
        $roles = array_keys($roleHierarchy); 
    
        foreach ($roles as $role) { 
         $theRoles[$role] = $role; 
        } 
        return $theRoles; 
    
    난 그냥 잘못된 방향으로가는

    , 그룹의 역할을 얻고 있도록 관리자 인터페이스를 보여주기 위해 그렇게 어렵지 않았다 시스템 역할 중 하나를 선택하여 그룹에 제공 할 수 있습니다. FormType을 재정의 할 필요가 없습니다. 컨트롤러에 양식에 고유 한 필드를 추가하십시오.

    나에게 두통을 많이 줘서 도움이되기를 바랍니다.

    1

    생성자에 엔티티를 전달하면 안됩니다. 양식 내부 개체에 액세스해야하는 경우는 다음과 같이 양식 빌더에 이벤트 리스너를 추가해야합니다 :

    마지막으로
    public function buildForm(FormBuilder $builder, array $options) 
    { 
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { 
         $form = $event->getForm(); 
         $entity = $event->getData(); 
    
         // This is your Group entity, now do something with it... 
         if ($entity instanceof Group) { 
          // $form->add ... 
         } 
        }); 
    } 
    
    +0

    FormEvents는 Symfony FormEvents이고 FormEvent는 FOSUserBundle FormEvent입니까? – agapitocandemor

    +1

    그들은 둘 다 Symfony라고 생각합니다. –

    관련 문제