TYPO3-版本: 8.7.7
我想在 PHP 中的 TYPO3 验证器中访问$this->request->getArguments()
。
我在流体中设置了一个临时字段:
<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"/>
如果我在<f:form.password name="reenter_password" id="reenter_password"/>
中设置property
而不是name
,则会出现以下错误:
#1297759968:属性路径"处的属性映射时出现异常:在类型为"RM\Rm注册\域\模型\用户"的目标对象中找不到属性"reenter_password"。
我不想设置模型属性,因为此属性应该仅用于检查 passwortfield 的相等性,而不应该获得用于存储的 TCA 或 SQL 表。
这是我的操作,我在其中调用验证器:
/**
* Complete New User Registeration
*
* @param User $newRegisteredUser
* @validate $newRegisteredUser RMRmRegistrationValidationValidatorNewRegisteredUser
* @validate $newRegisteredUser RMRmRegistrationValidationValidatorCompleteProfileUser
*/
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();
}
在验证器中,我可以通过以下方式进入密码字段:
TYPO3CMSCoreUtilityGeneralUtility::_POST()['tx_rmregistration_registration']['reenter_password']
但是是否可以将值临时获取给UserModel以在验证器中进行检查,如下所示:
// Compare Entered Passwords
if ($user->getPassword() == $user->getReenteredPassword()) {
return TRUE;
} else {
return FALSE;
}
为密码验证过程创建自己的(视图(模型,或为重新输入的密码$newRegisteredUser提供(暂时性或非暂时性(属性。然后使用自己的验证器(见这里(。
class UserValidator extends TYPO3CMSExtbaseValidationValidatorAbstractValidator {
/**
* Object Manager
*
* @var TYPO3CMSExtbaseObjectObjectManager
* @inject
*/
protected $objectManager;
/**
* Is valid
*
* @param mixed $user
* @return boolean
*/
public function isValid($user) {
if ($user->getPassword() !== $user->getPasswordConfirmation()) {
$error = $this->objectManager->get(
'TYPO3CMSExtbaseValidationError',
'Password and password confirmation do not match.', time());
$this->result->forProperty('passwordConfirmation')->addError($error);
return FALSE;
}
return TRUE;
}
}
并在控制器中使用如下:
/**
* action create
*
* @param VendorExtDomainModelUser $user
* @validate $user VendorExtDomainValidatorUserValidator
*
* @return void
*/
public function createAction(VendorExtDomainModelUser $user) {
}