こんにちは、私はユーザーがフロントエンドでパスワードを更新できるようにしようとしています。これ以外のフィールドはすべて更新されます。私はSilverstripeバージョン3.4.0です。これはおそらく、これを処理するための最良の方法ではありませんが、私はそう他の良いCMSと同様にSilverstripe:ConfirmedPasswordFieldは新しいパスワードを保存していません
// Edit & Save your details
public function EditMyDetails() {
//Include JS for updating details
Requirements::javascript('module-memberprofiles/javascript/MemberProfileUpdate.js');
Requirements::set_force_js_to_bottom(true);
$fields = new FieldList(
$leftCol = CompositeField::create(
TextField::create('FirstName', 'First Name')
->setFieldHolderTemplate('UserDetails_FieldHolder'),
TextField::create('Surname', 'Surname')
->setFieldHolderTemplate('UserDetails_FieldHolder'),
CompositeField::create(
TextField::create('Address', ''),
TextField::create('Suburb', ''),
CompositeField::create(
DropdownField::create('State', '', singleton('Member')->dbObject('State')->enumValues())->setFieldHolderTemplate('UserDetails_StatePostCode'),
TextField::create('PostCode', '')->setFieldHolderTemplate('UserDetails_StatePostCode')
)->addExtraClass('row')
)
->addExtraClass('userdetails-address wrap')
->setFieldHolderTemplate('UserDetails_AddressHolder'),
TextField::create('Phone', 'Phone')
->setFieldHolderTemplate('UserDetails_FieldHolder'),
TextField::create('Email', 'Email')
->setFieldHolderTemplate('UserDetails_FieldHolder')
)->setFieldHolderTemplate('UserDetails_CompositeField'),
$rightCol = CompositeField::create(
ConfirmedPasswordField::create('Password', 'Change Password', null, null, $showOnClick = true)
)->setFieldHolderTemplate('UserDetails_CompositeField')
);
$actions = new FieldList(new FormAction('SaveMyDetails', 'Save Profile'));
$validation = new RequiredFields(array('FirstName','Surname','Email'));
$form = new Form ($this, 'EditUserDetails', $fields, $actions, $validation);
$form->loadDataFrom(Member::currentUser());
$form->setTemplate('MemberProfilePage_UserDetailsForm');
return $form;
}
public function SaveMyDetails($data, $form) {
$table = Member::currentUser();
$members = Member::get();
$emailExists = $members->filter(array(
'Email' => $data['Email'],
'ID:not' => $table->ID
));
if($emailExists->count() > 0) {
$form->sessionMessage('Sorry, that email address already exists. Please try again','bad');
return $this->redirectBack();
} else {
$form->sessionMessage('Your details have been updated.','good');
}
$form->saveInto($table);
$table->write();
$this->redirectBack();
return $this;
}
成功メッセージが表示されますが、パスワードは保存されません。メンバーはどんなパスワードを取得しますか?なし? – bummzack
@bummzackねえ、パスワードは元のものと変わりません。 – Dallby