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;
}
}
我的问题在哪里?
尝试将您的 class 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;
}
}
停用并再次激活您的扩展程序,classes 将重新加载。
我通过禁用扩展并再次激活它来转储自动加载缓存。之后一切正常
@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。
- 确保模型中的所有属性(视图中的字段)(在本例中
class
GpSubscriber
) 已定义。
更多信息:
我的自定义 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;
}
}
我的问题在哪里?
尝试将您的 class 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;
}
}
停用并再次激活您的扩展程序,classes 将重新加载。
我通过禁用扩展并再次激活它来转储自动加载缓存。之后一切正常
@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。
- 确保模型中的所有属性(视图中的字段)(在本例中
class
GpSubscriber
) 已定义。
更多信息: