默认忘记密码表单是Email表单字段.我有一个附加到每个用户的许可证号码.作为用户,我希望通过输入许可证号而不是电子邮件来获取重置密码链接.
我找到了一种方法来覆盖功能方面而不是表单.到目前为止我做了什么
文件名:_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;
}
}
Run Code Online (Sandbox Code Playgroud)
会话消息已成功打印,并重定向到同一页面.
如何覆盖表单以使其成为Text字段而不是Email字段.
首先,只是一般性的提示,你应该避免使用Object :: useCustomClass()来支持Injector(https://docs.silverstripe.org/en/3.0/reference/injector/).Object :: useCustomClass()更像是2.4.
忘记密码表单生成于Security.您也可以尝试使用该类的自定义实现,并重载该ForgotPasswordForm方法.
config.yml
Injector:
Security:
class: MyCustomSecurity
Run Code Online (Sandbox Code Playgroud)
MyCustomSecurity.php
class MyCustomSecurity extends Security
{
public function LostPasswordForm()
{
$form = parent::LostPasswordForm();
$form->Fields()->replaceField('Email', TextField::create('Email'));
return $form;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |