Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework2 ZF2可以选择在表单中更改用户密码_Zend Framework2 - Fatal编程技术网

Zend framework2 ZF2可以选择在表单中更改用户密码

Zend framework2 ZF2可以选择在表单中更改用户密码,zend-framework2,Zend Framework2,我想要一个表单,在这里登录的用户可以更改他的用户数据。他可以选择插入新密码。我试图删除“password”和“passwordVerification”字段的inputfilter,如果发布的密码为空,但我不知道如何在我的服务中处理保存,密码不会被覆盖 控制器动作 public function indexAction() { $identity = $this->authentication()->getIdentity(); $userService = $thi

我想要一个表单,在这里登录的用户可以更改他的用户数据。他可以选择插入新密码。我试图删除“password”和“passwordVerification”字段的inputfilter,如果发布的密码为空,但我不知道如何在我的服务中处理保存,密码不会被覆盖

控制器动作

public function indexAction() {
    $identity = $this->authentication()->getIdentity();
    $userService = $this->userService;

    $form = $this->userForm;
    $form->bind($identity);

    $request = $this->getRequest();
    if ($request->isPost()) {
        $form->setData($request->getPost());

        if ($form->get('password')->getValue() == '') {
            $validationGroup = $form->getValidationGroup();
            $passwordKey = array_search('password', $validationGroup);
            $passwordVerificationKey = array_search('passwordVerification', $validationGroup);

            unset($validationGroup[$passwordKey]);
            unset($validationGroup[$passwordVerificationKey]);

            $form->setValidationGroup($validationGroup);
            $form->getInputFilter()->remove('password');
            $form->getInputFilter()->remove('passwordVerification');
        }

        if ($form->isValid()) {
            $userService->saveUser($form->getData());

            $this->flashMessenger()->addSuccessMessage('Data has been saved successfully');
            return $this->redirect()->toRoute('admin/account');
        }
    }

    return array(
        'userForm' => $form
    );
}
用户服务

public function saveUser(User $user) {
    if ($password = $user->getPassword()) {
        $user->setPassword($this->authenticationService->getAdapter()->getBcrypt()->create($password));
    }

    $this->userRepository->save($user);
}

当我这样做时,我在我的用户实体中使用use a unmapped password属性(例如passwordForm),该属性在表单中使用,因此不会覆盖原始密码。如果passwordForm字段已填充,则可以使用该值覆盖原始密码