簡體   English   中英

TYPO3 模型中關系屬性的驗證

[英]TYPO3 validation of relation property in model

我的 extbase 擴展中有模型 - 如下所示。 默認情況下,TYPO3 將遞歸驗證所有作者的屬性及其關系。 TYPO3 中是否有可能只是驗證作者關系是否存在而不是遞歸驗證它的所有(作者的)屬性和關系?

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

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

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

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM