2016-03-25 14 views
1

私はユーザーが登録できる登録フォームを持っています。彼らが登録するとき、私はそれらをグループに自動的に追加したい。 $member->AddToGroupByCode('Administrators')メソッドを使用しようとしましたが、これはメンバーにグループを追加しません。登録時にメンバーをグループに追加していますか?

私は間違っていますか?

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

$ member-> write()の後に$ member-> addToGroupByCode( 'Administrators')を入れてみてください。 –

+0

@GavinBruce - ちょうどそれを試して、うまくいきませんでした。 – ifusion

+0

管理者ではなく管理者にお試しください。 –

答えて

1

メンバー:: addToGroupByCode($コード、$タイトル=は "")内部グループコードを使用しています。新しいグループを作成すると、コードは小文字のタイトルとして生成されますが、後でタイトルを変更することができます。既存のグループコードを取得する唯一の信頼できる方法は、データベースからのものです。

SELECT Code, Title FROM `Group`; 

あなたが$member->addToGroupByCode('administrators', 'Administrators'); を呼び出した場合は不足している場合、これはコード「管理者の持つ新しいグループを作成しているだろう。

だから、最終的なコードは次のようになります。

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

うん、 '$ member-> addToGroupByCode( 'administrators'、 'Administrators')のあなたのやり方を試してみた; - それは私がやった最初のテストのために働いたが、ちょっと..私はSS 3.3.1を使用しています。 – ifusion

+0

さらにテストしてみたら、グループを作成して(何でも構いませんが)、その権限をCMSの「完全な管理者権限」に設定してから、私のような登録フォームは、そのグループを一度しか設定しません。登録した他のメンバーにはグループが追加されません。しかし、グループから "完全な管理者権限"を削除すると、登録したすべてのユーザーのためにグループがユーザーに追加されます。または私は何かを逃していますか? – ifusion

2

非常にシンプル。 $ member-> write();の下にこれを追加してください。

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

$ member-> new Member()の上に置きます。

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

それとも

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

$グループは、あなたが望むターゲットグループです。それをフィルタリングしたり、idで取得することができます。

関連する問題