[英]Symfony 2.5 addViolationAt deprecated, use buildViolation()
我一直在關注關於如何創建類約束驗證器的食譜,現在我正准備在validate()
函數中添加違規。
但是,我的 IDE 通知我不推薦使用addViolation()
和addViolationAt()
函數。
有人可以指出我如何使用Context\\ExecutionContextInterface::buildViolation()
函數的正確方向嗎?
$this->context
是Symfony\\Component\\Validator\\ExecutionContext
一個實例
class ProtocolClassValidator extends ConstraintValidator
{
public function validate($protocol, Constraint $constraint)
{
if ($protocol->getFoo() != $protocol->getBar()) {
$this->context->addViolationAt(
'foo',
$constraint->message,
array(),
null
);
}
}
}
當將調用$this->context->addViolationAt()
更改為簡單的$this->context->buildViolation()
,我得到以下異常:
UndefinedMethodException:試圖在剝離的路徑第 23 行中對類“Symfony\\Component\\Validator\\ExecutionContext”調用方法“buildViolation”。您是想調用:“addViolation”嗎?
第 23 行有以下代碼:
$builder = $this->context->buildViolation($constraint->message)
->atPath('formField')
->addViolation();
addViolation
和addViolationAt
從 2.5 addViolationAt
被棄用,但直到 3.0 才會被移除,因此它們仍然可以使用一段時間。
但是...取自UPGRADE FROM 2.x to 3.0日志...
方法addViolationAt()
已刪除。 您應該使用buildViolation()
代替:
前:
$context->addViolationAt('property', 'The value {{ value }} is invalid.', array(
'{{ value }}' => $invalidValue,
));
后:
$context->buildViolation('The value {{ value }} is invalid.')
->atPath('property')
->setParameter('{{ value }}', $invalidValue)
->addViolation();
));
從Context/ExecutionContextInterface 中獲取更多信息......
/**
* Returns a builder for adding a violation with extended information.
*
* Call {@link ConstraintViolationBuilderInterface::addViolation()} to
* add the violation when you're done with the configuration:
*
* $context->buildViolation('Please enter a number between %min% and %max.')
* ->setParameter('%min%', 3)
* ->setParameter('%max%', 10)
* ->setTranslationDomain('number_validation')
* ->addViolation();
*
* @param string $message The error message
* @param array $parameters The parameters substituted in the error message
*
* @return ConstraintViolationBuilderInterface The violation builder
*/
public function buildViolation($message, array $parameters = array());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.