편집보기에서 그룹 역할을 표시하는 FosuserBundle
-
20-12-2019 - |
문제
Controller와 FormType을 재정의하여 선택한 그룹의 역할을 내보기에서 표시하지만 올바른 방법을 찾지 못합니다. 나는 모든 것을 무시하기위한 조치를 따르고, 그 일이 일어나지 만, 문제가 생성자가 엔티티 객체에 전달하는 서비스에 대해 말하려고 할 때 문제가 발생합니다.
FormType을 무시해야함에 따라, 구현 해야하는 서비스를 통과하는 방법, 내 그룹 엔티티?
누구든지 그것을 달성하는 방법에 대한 아이디어가 있습니까?
여기에 내가 한 일은 다음과 같습니다.
-
컨트롤러를 재정의하고 양식을 작성할 때
$group
엔티티를 전달합니다$formFactory = $this->container->get('fos_user.group.form.factory'); $form = $formFactory->createForm($group); //Here
-
양식을 무시하고, 내 엔티티를 통과 할 수있는 사용자 정의 __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? }
-
문서가 말하는 경우 서비스를 만듭니다 (여기에 실제 문제와 예외가 발생 함)
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 }
역할에 대한 키를 가져 오는 컨테이너가 오류없이 전달됩니다.
나는 정말로 쌓아 올랐고, 어떻게 진행되는지에 대한 생각이 없다.
해결책
마지막으로 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 ...
}
});
}
.