0

TYPO3-版本:8.7.7

我想$this->request->getArguments()在 PHP 中访问 TYPO3 的验证器。

我在流体中设置了一个临时字段:

<label for="reenter_password" class="reenter_password{rm:hasError(property:'reenter_password',then:' text-danger')}">
    Reenter Password*
</label><br>
<f:form.password name="reenter_password" id="reenter_password"/>

如果我设置property而不是namein<f:form.password name="reenter_password" id="reenter_password"/>我得到以下错误:

#1297759968:属性路径“”的属性映射时出现异常:在“RM\RmRegistration\Domain\Model\User”类型的目标对象中找不到属性“reenter_password”。

我不想设置模型属性,因为这个属性应该只用于检查密码字段是否相等,而不应该获得 TCA 或 SQL 表进行存储。

这是我的操作,我在其中调用验证器:

/**
 * Complete New User Registeration
 *
 * @param User $newRegisteredUser
 * @validate $newRegisteredUser \RM\RmRegistration\Validation\Validator\NewRegisteredUser
 * @validate $newRegisteredUser \RM\RmRegistration\Validation\Validator\CompleteProfileUser
 */
public function completeNewRegisteredUserAction(User $newRegisteredUser)
{
    // Store Changes, Update and Persist
    $newRegisteredUser->setPassword($this->saltThisPassword($newRegisteredUser->getPassword()));
    $this->userRepository->update($newRegisteredUser);
    $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager')->persistAll();
}

在验证器中,我可以通过以下方式进入密码字段:

\TYPO3\CMS\Core\Utility\GeneralUtility::_POST()['tx_rmregistration_registration']['reenter_password']

但是是否可以让 UserModel 的 Value 临时在 Validator 中进行检查,如下所示:

// Compare Entered Passwords
if ($user->getPassword() == $user->getReenteredPassword()) {
    return TRUE;
} else {
    return FALSE;
}
4

1 回答 1

2

为密码验证过程制作一个自己的(查看)模型,或者为 $newRegisteredUser 提供一个(瞬态或非瞬态)属性以用于重新输入的密码。然后使用自己的验证器(参见此处)。

class UserValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {

    /**
     * Object Manager
     *
     * @var \TYPO3\CMS\Extbase\Object\ObjectManager
     * @inject
     */
    protected $objectManager;

    /**
     * Is valid
     *
     * @param mixed $user
     * @return boolean
     */
    public function isValid($user) {
        if ($user->getPassword() !== $user->getPasswordConfirmation()) {
            $error = $this->objectManager->get(
                    'TYPO3\CMS\Extbase\Validation\Error',
                    'Password and password confirmation do not match.', time());
            $this->result->forProperty('passwordConfirmation')->addError($error);
            return FALSE;
        }
        return TRUE;
    }

}

并像这样在控制器中使用:

/**
 * action create
 *
 * @param \Vendor\Ext\Domain\Model\User $user
 * @validate $user \Vendor\Ext\Domain\Validator\UserValidator
 *
 * @return void
 */
public function createAction(\Vendor\Ext\Domain\Model\User $user) {

}
于 2018-03-14T00:10:17.263 回答