Symfony:Assert/Length 忽略空格
Symfony: Assert/Length Ignore Whitespace
我有一个模型和一个属性 $test
。
我有一个 annotation
用于断言最大长度。但我不想计算空格,只计算字符。所以 text
必须有 40 个字符,而不是 40 个字符和空格的混合。这可能吗?
/**
* @var string
*
* @Assert\NotBlank(message = "text.length.error")
* @Assert\Length(
* max = 40,
* maxMessage = "Only 40 letters."
* )
*/
protected $text;
那么 LengthValidator class 正在使用 mb_strlen 函数来确定长度。如果你想使用非空白字符的数量进行验证,你需要创建一个自定义验证器。
注释:
/**
* @var string
*
* @Assert\NotBlank(message = "text.length.error")
* @Assert\Callback("validate")
*/
protected $text;
验证方法(同class):
public function validate(ExecutionContextInterface $context) {
if (40 > strlen(str_replace(" ", "", $this->text))) {
$context->buildViolation('Only 40 letters.')
->atPath('text')
->addViolation();
}
}
该方法的参数是Symfony\Component\Validator\Context\ExecutionContextInterface
的一个实例,请务必在文件顶部导入。
有关更多信息(例如,如何将验证放入单独的 class),请查看 symfony documentation。
您可以创建自己的约束:
CharacterLength.php
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class CharacterLength extends Constraint
{
public $max;
public $maxMessage;
}
CharacterLengthValidator.php
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class CharacterLengthValidator extends ConstraintValidator
{
/**
* @param string $text
* @param Constraint $constraint
*/
public function validate($text, Constraint $constraint)
{
if (strlen(str_replace(" ", "", $text)) > $constraint->max) {
$this->context
->buildViolation($constraint->maxMessage)
->addViolation();
}
}
}
YourEntity.php
use AppBundle\Validator\Constraints\CharacterLength;
/**
* @var string
*
* @CharacterLength(
* max = 40,
* maxMessage = "Only 40 letters."
* )
*/
protected $text;
我有一个模型和一个属性 $test
。
我有一个 annotation
用于断言最大长度。但我不想计算空格,只计算字符。所以 text
必须有 40 个字符,而不是 40 个字符和空格的混合。这可能吗?
/**
* @var string
*
* @Assert\NotBlank(message = "text.length.error")
* @Assert\Length(
* max = 40,
* maxMessage = "Only 40 letters."
* )
*/
protected $text;
那么 LengthValidator class 正在使用 mb_strlen 函数来确定长度。如果你想使用非空白字符的数量进行验证,你需要创建一个自定义验证器。
注释:
/**
* @var string
*
* @Assert\NotBlank(message = "text.length.error")
* @Assert\Callback("validate")
*/
protected $text;
验证方法(同class):
public function validate(ExecutionContextInterface $context) {
if (40 > strlen(str_replace(" ", "", $this->text))) {
$context->buildViolation('Only 40 letters.')
->atPath('text')
->addViolation();
}
}
该方法的参数是Symfony\Component\Validator\Context\ExecutionContextInterface
的一个实例,请务必在文件顶部导入。
有关更多信息(例如,如何将验证放入单独的 class),请查看 symfony documentation。
您可以创建自己的约束:
CharacterLength.php
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class CharacterLength extends Constraint
{
public $max;
public $maxMessage;
}
CharacterLengthValidator.php
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class CharacterLengthValidator extends ConstraintValidator
{
/**
* @param string $text
* @param Constraint $constraint
*/
public function validate($text, Constraint $constraint)
{
if (strlen(str_replace(" ", "", $text)) > $constraint->max) {
$this->context
->buildViolation($constraint->maxMessage)
->addViolation();
}
}
}
YourEntity.php
use AppBundle\Validator\Constraints\CharacterLength;
/**
* @var string
*
* @CharacterLength(
* max = 40,
* maxMessage = "Only 40 letters."
* )
*/
protected $text;