【问题标题】:Ignore disabled state in custom TYPO3 Validator忽略自定义 TYPO3 验证器中的禁用状态
【发布时间】:2020-10-14 09:11:40
【问题描述】:

我有一个带有用户可以注册的表单的插件,为了避免重复注册,我添加了一个自定义验证器,用于检查 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 用户(在注册表单的提交操作中创建),到目前为止一切顺利。 但是现在我的自定义验证器在尝试通过电子邮件查找时没有找到被禁用的用户。

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

【问题讨论】:

    标签: validation typo3 extbase


    【解决方案1】:

    您需要将存储库方法配置为忽略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*,因为它会自动返回第一个对象。)

    【讨论】:

    • 我已将它添加到操作的初始化方法中,因此它也适用于自定义验证器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多