Validation 模型中关系属性的类型3验证

Validation 模型中关系属性的类型3验证,validation,extbase,typo3-9.x,Validation,Extbase,Typo3 9.x,我的extbase扩展中有一个模型,如下所示。 默认情况下,Type3将递归验证所有作者的属性及其关系。在Type3中是否有可能只是验证作者关系是否存在,而不是递归地验证它(作者)的所有属性和关系 class MyModel { /** * @var string * @validate NotEmpty */ protected $title = ''; /** * @var \MyAnotherModel * @co

我的extbase扩展中有一个模型,如下所示。 默认情况下,Type3将递归验证所有作者的属性及其关系。在Type3中是否有可能只是验证作者关系是否存在,而不是递归地验证它(作者)的所有属性和关系

class MyModel
{
    /**
     * @var string
     * @validate NotEmpty
     */
    protected $title = '';

    /**
     * @var \MyAnotherModel
     * @copy reference
     */
    protected $author;

Extbase支持两种类型的验证(请参阅)

  • 模型验证
  • 控制器动作验证
当对聚合根使用(完整)模型验证时,这意味着所有涉及的聚合也需要通过验证——换句话说,没有可以单独启用/禁用的条件验证

根据我对您的情景的理解,您的目标是:

  • 忽略
    Author
    MyAnotherModel
    在初始源代码中)上的属性验证
  • 只需断言
    author
    属性的基数(
    MyModel.author
    在初始源代码中)
这可以通过控制器动作验证来完成,如下所示

新的自定义验证器
@验证控制器动作中的
工具书类
  • 文件:
  • 上下文中的源代码示例:
    • 自定义验证程序:
    • @Validate
      控制器中的注释:
class MyModelCardinalityValidator extends AbstractValidator
{
    public function isValid($value)
    {
        if (!$value instanceof MyModel) {
            throw new \LogicException('...');
        }
        if ($value->getAuthor() === null) {
            $this->addError('Author is missing', 1577381508);
            // 1577381508 = unix-timestamp as "unique error code"
        }
    }
}
class MyController extends ActionController
{
    /**
     * @param MyModel $model
     * @TYPO3\CMS\Extbase\Annotation\Validate("NamespaceTo\MyModelCardinalityValidator", param="model")
     */
    public function myAction(MyModel $model)
    {
        // your application code
    }
}