2016-03-25 12 views
1

Ich habe ein Registrierungsformular, mit dem sich ein Benutzer registrieren kann. Wenn sie sich registrieren, möchte ich sie automatisch zu einer Gruppe hinzufügen. Ich habe versucht, die $member->AddToGroupByCode('Administrators') Methode zu verwenden, aber dies fügt dem Mitglied keine Gruppen hinzu.Mitglieder zu einer Gruppe hinzufügen, wenn sie registriert werden?

Was mache ich falsch?

RegisterForm.php

<?php 

class RegisterForm extends Form { 
    public function __construct($controller, $name) { 
     $fields = new FieldList(
      TextField::create('FirstName'), 
      TextField::create('Surname'), 
      TextField::create('Email'), 
      PasswordField::create('Password'), 
      PasswordField::create('ConfirmPassword'), 
      TextField::create('Username') 

     ); 

     $actions = new FieldList(
      new FormAction('doRegister', 'Register') 
     ); 

     $validator = new RequiredFields(
      'Email', 'Password', 'ConfirmPassword', 'Username' 
     ); 

     parent::__construct($controller, $name, $fields, $actions, $validator); 

     $this->disableSecurityToken(); 
    } 

    public function doRegister($data, $form) { 
     $member = new Member(); 
     $form->saveInto($member); 
     $password = $data['Password']; 
     $member->changePassword($password); 
     $member->addToGroupByCode('Administrators') // Or could be another group I setup e.g 'Students' etc; 
     $member->write(); 

     return $this->controller->redirect($this->controller->Link('thanks')); 
    } 
} 
+0

Versuchen Sie $ member-> addToGroupByCode ('Administrators') hinter $ member-> write(); –

+0

@GavinBruce - Ich habe das gerade versucht, und nein hat nicht funktioniert. – ifusion

+0

Versuchen Sie Administratoren anstatt Administratoren. –

Antwort

1

Mitglied :: addToGroupByCode ($ code, $ title = "") verwendet internen Gruppencode. Wenn Sie eine neue Gruppe erstellen, wird der Code als Titel in Kleinbuchstaben generiert, später kann der Titel jedoch geändert werden. Der einzige zuverlässige Weg, um existierende Gruppencodes zu erhalten, ist von der Datenbank.

SELECT Code, Title FROM `Group`; 

Wenn Sie $member->addToGroupByCode('administrators', 'Administrators'); nennen dies ‚Administratoren‘ eine neue Gruppe mit dem Code erstellt haben würde, wenn sie fehlt.

So ist der endgültige Code könnte sein:

public function doRegister($data, $form) { 
    $member = Member::get()->filter('Email', $data['Email'])->first(); 
    if ($member) { 
     return $this->memberAlreadyExists(); 
    } 

    $member = new Member(); 
    $member->update($data); 
    $member->write(); 
    $member->addToGroupByCode('administrators', 'Administrators'); 

    return $this->controller->redirect($this->controller->Link('thanks')); 
} 
+0

Hmm, habe deinen Weg von '$ member-> addToGroupByCode ('administrators', 'Administrators') versucht;' - es funktionierte für den ersten Test, den ich tat, aber dann jede andere Person, die ich registrieren wollte, nachdem keine Gruppe hinzugefügt wurde .. Seltsames Verhalten hey .. ich benutze SS 3.3.1 – ifusion

+0

Also bei weiteren Tests habe ich festgestellt, dass wenn Sie eine Gruppe erstellen (kann alles aufgerufen werden) und legen Sie ihre Berechtigungen auf "Full Administratorrechte" im CMS und dann verwenden ein Anmeldeformular wie meines, es wird nur einmal diese Gruppe setzen. Für jedes andere von Ihnen registrierte Mitglied wird keine Gruppe hinzugefügt. Wenn Sie jedoch die "Volle Administratorrechte" aus der Gruppe entfernen, wird die Gruppe dem Benutzer für jeden von Ihnen registrierten Benutzer hinzugefügt. Möglicher Fehler? Oder fehlt mir etwas? – ifusion

2

Sehr einfach. Füge das einfach unter deinem $ member-> write();

$member->Groups()->add($group); 

Und setzen Sie über Ihr $ member-> new Member();

$group = Group::get()->filter('Title','Client')->first(); 

Oder

$group = Group::get()->filter('ID','SomeID')->first(); 

Die $ Gruppe ist die Zielgruppe, die Sie wollen. Sie können es filtern oder durch ID erhalten.

Verwandte Themen