忽略自定义 TYPO3 验证器中的禁用状态

Ignore disabled state in custom TYPO3 Validator

我有一个带有用户可以注册的表单的插件,为了避免重复注册,我添加了一个自定义验证器,用于检查 FE 用户是否已经包含该电子邮件。

//This is just the isValid method of the custom validator..
public function isValid($value): void
{
  $existingUser = $this->frontendUserRepository->findByEmail($value)->getFirst();
  if ($existingUser != null) {
    $this->addError(
      'E-mail already registered',
      1592556619
    );
  }
}

由于额外的双重选择加入机制,我想禁用新创建的 FE 用户(这是在注册表单的提交操作中创建的),到目前为止一切顺利。 但是现在我的自定义验证器没有找到在尝试通过电子邮件查找时被禁用的用户。

所以我的问题是,我怎么告诉它他必须忽略条目的禁用状态。

您需要配置存储库方法以忽略 disabled 启用字段。 (参见 enablecolumns in TCA。)

您需要向存储库添加自定义 findOneByEmail() 方法并相应地配置查询:

$query = $this->createQuery();
$query->getQuerySettings()
    ->setIgnoreEnableFields(true)
    ->setEnableFieldsToBeIgnored(['disabled']);

之后您可以像往常一样执行查询,现在将包括禁用用户:

$query
    ->matching($query->equals('email', $email))
    ->setLimit(1);

return $query->execute()->getFirst();

请注意,您应该将它放在一个单独的 findOneByEmailIncludingHidden() 或类似的地方,以避免意外的副作用,并使该查询方法的特殊行为更加清晰。

(您可能已经注意到这里使用 findOneBy* 而不是 findBy* 因为这将自动 return 第一个对象。)