在 SilverStripe 中覆盖丢失的密码表单
Override lost password form in SilverStripe
默认的忘记密码表单是一个 Email
表单域。我有一个许可证号附加到每个用户。作为用户,我想通过输入我的许可证号而不是电子邮件来获取重置密码 link。
我找到了一种方法来覆盖功能方面而不是表单。我到目前为止所做的
文件名:_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;
}
}
会话消息已成功打印并重定向到同一页面。
如何重写表单以使其成为 Text
字段而不是 Email
字段。
首先,只是一个一般提示,您应该避免使用 Object::useCustomClass() 而使用 Injector (https://docs.silverstripe.org/en/3.0/reference/injector/)。 Object::useCustomClass() 更像是 2.4 的东西。
忘记密码表单已在 Security
中生成。您也可以尝试使用 class 的自定义实现,并重载 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;
}
}
默认的忘记密码表单是一个 Email
表单域。我有一个许可证号附加到每个用户。作为用户,我想通过输入我的许可证号而不是电子邮件来获取重置密码 link。
我找到了一种方法来覆盖功能方面而不是表单。我到目前为止所做的
文件名:_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;
}
}
会话消息已成功打印并重定向到同一页面。
如何重写表单以使其成为 Text
字段而不是 Email
字段。
首先,只是一个一般提示,您应该避免使用 Object::useCustomClass() 而使用 Injector (https://docs.silverstripe.org/en/3.0/reference/injector/)。 Object::useCustomClass() 更像是 2.4 的东西。
忘记密码表单已在 Security
中生成。您也可以尝试使用 class 的自定义实现,并重载 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;
}
}