簡體   English   中英

TYPO3 自定義驗證不起作用

[英]TYPO3 Custom Validation not working

我的自定義 Extbase 驗證不起作用。 我收到以下錯誤。

版本 TYPO3 7.6.16

我正在嘗試驗證輸入。

Invalid validate annotation in VENDOR\ex\Domain\Model\GpSubscriber::salutation: Could not resolve class name for validator ""

我的模型 GpSubscriber.php

<?php
namespace VENDOR\ex\Domain\Model;

/**
* GpSubscriber
*/
class GpSubscriber extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
/**
 * salutation
 *
 * @var string
 * @validate \VENDOR\ex\Domain\Validator\SalutationValidator
 */
protected $salutation = '';

我的驗證器 SalutationValidator.php

<?php
namespace VENDOR\ex\Domain\Validator;


class SalutationValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {
public function isValid($value) {
    if ($value == 'false') {
        $this->addError('error.');
        return FALSE;
    }
    return TRUE;
}
}

我的問題在哪里?

我通過禁用擴展並再次激活它來轉儲自動加載緩存。 之后一切正常

嘗試將您的類 SalutationValidator 移動到 extension/Validation/Validator/SalutationValidator.php

<?php
namespace VENDOR\ex\Domain\Model;

/**
* GpSubscriber
*/
class GpSubscriber extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{

    /**
     * salutation
     *
     * @var string
     * @validate \VENDOR\ex\Validation\Validator\SalutationValidator
     */
    protected $salutation = '';

<?php
namespace VENDOR\ex\Validation\Validator;

class SalutationValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {

    /**
     * The given value is valid if it contains not more then max items
     *
     * @param mixed $value The value that should be validated
     * @return void
     */
    public function isValid($value) {
        if ($value == 'false') {
            $this->addError('error.');
            return FALSE;
        }
    return TRUE;
    }
}

停用並再次激活您的擴展和類將重新加載。

@validate自 9.3 版@validate已棄用。 在 7+ 中使用@TYPO3\\CMS\\Extbase\\Annotation\\Validate代替。

例子:

use TYPO3\CMS\Extbase\Annotation as Extbase;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;

class GpSubscriber extends AbstractEntity {

    /**
     * @var string
     * @Extbase\Validate("VENDOR\ex\Domain\Validator\SalutationValidator")
     */
    protected $title;

...
}

這樣,您仍然可以將驗證器存儲在Model/Validator目錄中。

如果您選擇將驗證器存儲在擴展中的Validation/Validator下,您可以選擇使用@Extbase\\Validate("VENDOR.ex:Salutation")@Extbase\\Validate("VENDOR\\ex\\Validation\\Validator\\SalutationValidator")訪問您的驗證器。

筆記:

  • 確保@Extbase\\Validate中的驗證器命名空間不以斜杠開頭。
  • 確保所有定義的屬性的 getter 和 setter。
  • 確保您的模型(在本例中為GpSubscriber類)中的所有屬性(視圖中的字段)都已定義。

更多信息:

暫無
暫無

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

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