【问题标题】:TYPO3 validation of relation property in modelTYPO3 验证模型中的关系属性
【发布时间】:2019-12-23 08:09:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: validation extbase typo3-9.x


    【解决方案1】:

    Extbase 支持两种类型的验证(参见https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/9-CrosscuttingConcerns/2-validating-domain-objects.html

    • 模型验证
    • 控制器操作验证

    在聚合根上使用(完整)模型验证时,这意味着所有涉及的聚合也需要通过验证 - 换句话说,没有可以单独启用/禁用的条件验证。

    根据我从您的场景中了解到的情况,您的目标是:

    • 忽略Author 上的属性验证(MyAnotherModel 在初始源中)
    • 只需声明 author 属性的基数(MyModel.author 在初始源中)

    这可以通过控制器动作验证来完成,如下所示。

    新的自定义验证器

    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"
            }
        }
    }
    

    @Validate 在控制器动作中

    class MyController extends ActionController
    {
        /**
         * @param MyModel $model
         * @TYPO3\CMS\Extbase\Annotation\Validate("NamespaceTo\MyModelCardinalityValidator", param="model")
         */
        public function myAction(MyModel $model)
        {
            // your application code
        }
    }
    

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多