【问题标题】:TYPO3 Custom Validation not workingTYPO3 自定义验证不起作用
【发布时间】:2017-04-06 08:04:59
【问题描述】:

我的自定义 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;
}
}

我的问题在哪里?

【问题讨论】:

  • 看起来不错,您是否完全清除缓存?
  • 是的,我清除了安装工具中的所有缓存。
  • 很奇怪。我没有发现明显的错误。
  • 从 TYPO3 7.x 开始,在核心中找到该错误消息的唯一位置是 \TYPO3\CMS\Form\Controller\FrontendController。那是你的版本吗?你是从扩展 form 继承的吗?

标签: php validation typo3 extbase


【解决方案1】:

我通过禁用扩展并再次激活它来转储自动加载缓存。之后一切正常

【讨论】:

    【解决方案2】:

    尝试将你的类 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;
        }
    }
    

    停用并再次激活您的扩展程序和类将重新加载。

    【讨论】:

      【解决方案3】:

      @validate 自 9.3 版起已弃用。在 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) 已定义。

      更多信息:

      【讨论】:

        猜你喜欢
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多