2017-03-07 4 views
2

デフォルトのパスワードを忘れたフォームはEmailフォームフィールドです。私は、各ユーザーにライセンス番号を添付しています。ユーザーとして、電子メールではなく自分のライセンス番号を入力して、リセットパスワードのリンクを取得したいと考えています。SilverStripeの失われたパスワードフォームをオーバーライド

私は機能面をオーバーライドする方法を見つけましたが、フォームはオーバーライドしませんでした。私は今

ファイル名まで行ってきた:_config.php

Object::useCustomClass('MemberLoginForm', 'ExtendLoginForm');

ファイル名:ExtendLoginForm.php

単なるテストとして - forgotPasswordメソッドをオーバーライド

class ExtendLoginForm extends MemberLoginForm 
{ 

    public function forgotPassword($data) { 
     // Ensure password is given 

     $this->sessionMessage('This works', 'bad'); 

     $this->controller->redirect('Security/lostpassword'); 
     return; 
    } 
} 

セッションの混乱年齢は同じページにリダイレクトされて正常に印刷されます。

フィールドをEmailフィールドの代わりにTextにするには、フォームをオーバーライドするにはどうすればよいですか。

答えて

9

まず、一般的なヒントとして、Injector(https://docs.silverstripe.org/en/3.0/reference/injector/)を優先してObject :: useCustomClass()を使用しないでください。 Object :: useCustomClass()は2.4のものです。

パスワードを忘れた場合のフォームは、Securityで生成されます。そのクラスのカスタム実装を使用して、ForgotPasswordFormメソッドをオーバーロードすることもできます。

config.yml

Injector: 
    Security: 
    class: MyCustomSecurity 

MyCustomSecurity.php

class MyCustomSecurity extends Security 
{ 
    public function LostPasswordForm() 
    { 
     $form = parent::LostPasswordForm(); 
     $form->Fields()->replaceField('Email', TextField::create('Email')); 

     return $form; 
    } 
} 
+0

それはTextFieldを規定するのに役立つ可能性があり::( 'LicenceNumber')を作成する代わりに、テキストフィールドの作成::( 'メール')、分化のためだけに。 – jakxnz

+1

別のメソッドをオーバーロードしない限り、フィールド 'Email'の命名は必須です。あなたはラベルを変更することができます。 TextField :: create( 'Email'、 'ライセンス番号'); – UncleCheese

関連する問題