문제

Controller와 FormType을 재정의하여 선택한 그룹의 역할을 내보기에서 표시하지만 올바른 방법을 찾지 못합니다. 나는 모든 것을 무시하기위한 조치를 따르고, 그 일이 일어나지 만, 문제가 생성자가 엔티티 객체에 전달하는 서비스에 대해 말하려고 할 때 문제가 발생합니다.

FormType을 무시해야함에 따라, 구현 해야하는 서비스를 통과하는 방법, 내 그룹 엔티티?

누구든지 그것을 달성하는 방법에 대한 아이디어가 있습니까?

여기에 내가 한 일은 다음과 같습니다.

  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? 
    }
    
  3. 역할에 대한 키를 가져 오는 컨테이너가 오류없이 전달됩니다.

    1. 문서가 말하는 경우 서비스를 만듭니다 (여기에 실제 문제와 예외가 발생 함)

       x_s_cosmos.group.form.type:
          class: X\S\CosmosBundle\Form\Type\GroupFormType
          arguments: [@service_container, here_should_be_my_entity?]
          tags:
              - { name: form.type, alias: kosmos_group_form }
      
    2. 나는 정말로 쌓아 올랐고, 어떻게 진행되는지에 대한 생각이 없다.

도움이 되었습니까?

해결책

마지막으로 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을 무시할 필요가 없습니다. 컨트롤러만으로 자신의 필드를 폼에 추가 할 수 있습니다.

그것은 나에게 두통을 많이 주었을 때 도움이되기를 바랍니다.

다른 팁

엔티티를 생성자에 전달해서는 안됩니다.양식 안에 엔티티에 액세스 해야하는 경우 다음과 같이 폼 빌더에 이벤트 수신기를 추가해야합니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top