2016-10-29 2 views
1

Ich habe ein Konto (wie Firma Konto) Einheit mit einer Benutzervereinigung für die accountOwner.Bedingt anzeigen Formularfeld in Symfony 3

Sowohl Kontoinhaber als auch Benutzer mit ROLE_ADMIN können das Konto bearbeiten, aber nur Benutzer mit ROLE_ADMIN können den Kontoinhaber festlegen.

Benötige ich 2 Formulartypen? oder kann ich das Feld accountOwner auf demselben Formular basierend auf der Benutzerrolle konditionell präsentieren?

Antwort

1

Sie können accountOwner Assoziation bedingt darstellen. Wenn Sie das Formular dynamisch ändern möchten, verwenden Sie normalerweise form events.

jedoch, da Felder Ihre Form ist abhängen nicht die tatsächlichen Daten an die Form gebunden, sondern auf Sicherheitskontext, können Sie einfach Berechtigungsprüfung in Ihre Formulartyp injizieren und prüfen Sie, ob Sie benötigte Feld hinzufügen möchten:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('always_present_field'); 
    $builder->add('another_always_present_field'); 

    if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) { 
     $builder->add('conditional_field_if_current_user_is_admin'); 
    } 
} 
+0

Bestätigt. Der letztere Ansatz hat gut funktioniert, danke. – Coder1

Verwandte Themen