我需要转换类型为 ConstraintViolationListInterface
的对象用于进一步记录的单个异常,其中消息是来自列表上每个约束违规的消息的串联,当验证失败时。
显然我不能使用验证在每个包中重复 foreach 循环来实现这一点,因此我正在考虑再创建一个包,提供一个接受 ConstraintViolationListInterface
的简单服务。并返回一个异常。在 Symfony 中是否有针对此的标准解决方案?我需要编写这个服务似乎很奇怪,这个问题对我来说似乎很常见。
最佳答案
我也很惊讶 symfony 对此没有任何帮助,这就是我创建自定义异常的原因:
class ValidationException extends \Exception
{
private $violations;
public function __construct(array $violations)
{
$this->violations = $violations;
parent::__construct('Validation failed.');
}
public function getMessages()
{
$messages = [];
foreach ($this->violations as $paramName => $violationList) {
foreach ($violationList as $violation) {
$messages[$paramName][] = $violation->getMessage();
}
}
return $messages;
}
public function getJoinedMessages()
{
$messages = [];
foreach ($this->violations as $paramName => $violationList) {
foreach ($violationList as $violation) {
$messages[$paramName][] = $violation->getMessage();
}
$messages[$paramName] = implode(' ', $messages[$paramName]);
}
return $messages;
}
}
所有代码可用 here .
我以另一种方式使用此异常:
try {
$errors = $validator->validate(...);
if (0 !== count($errors)) {
throw new ValidationException($errors);
}
} catch (ValidationException $e) {
// Here you can obtain your validation errors.
var_dump($e->getMessages());
}
关于php - ConstraintViolationListInterface 到 Symfony 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47875979/