123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- /*
- * Copyright 2011 Johannes M. Schmitt <schmittjoh@gmail.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- namespace JMS\SerializerBundle\Serializer\Handler;
- use JMS\SerializerBundle\Serializer\YamlSerializationVisitor;
- use JMS\SerializerBundle\Serializer\JsonSerializationVisitor;
- use JMS\SerializerBundle\Serializer\GraphNavigator;
- use Symfony\Component\Validator\ConstraintViolation;
- use Symfony\Component\Validator\ConstraintViolationList;
- use JMS\SerializerBundle\Serializer\VisitorInterface;
- use JMS\SerializerBundle\Serializer\GenericSerializationVisitor;
- use JMS\SerializerBundle\Serializer\XmlSerializationVisitor;
- class ConstraintViolationHandler implements SubscribingHandlerInterface
- {
- public static function getSubscribingMethods()
- {
- $methods = array();
- $formats = array('xml', 'json', 'yml');
- $types = array('Symfony\Component\Validator\ConstraintViolationList' => 'serializeList', 'Symfony\Component\Validator\ConstraintViolation' => 'serializeViolation');
- foreach ($types as $type => $method) {
- foreach ($formats as $format) {
- $methods[] = array(
- 'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
- 'type' => $type,
- 'format' => $format,
- 'method' => $method.'To'.$format,
- );
- }
- }
- return $methods;
- }
- public function serializeListToXml(XmlSerializationVisitor $visitor, ConstraintViolationList $list, array $type)
- {
- if (null === $visitor->document) {
- $visitor->document = $visitor->createDocument();
- }
- foreach ($list as $violation) {
- $this->serializeViolationToXml($visitor, $violation);
- }
- }
- public function serializeListToJson(JsonSerializationVisitor $visitor, ConstraintViolationList $list, array $type)
- {
- return $visitor->visitArray(iterator_to_array($list), $type);
- }
- public function serializeListToYml(YamlSerializationVisitor $visitor, ConstraintViolationList $list, array $type)
- {
- return $visitor->visitArray(iterator_to_array($list), $type);
- }
- public function serializeViolationToXml(XmlSerializationVisitor $visitor, ConstraintViolation $violation, array $type = null)
- {
- if (null === $visitor->document) {
- $visitor->document = $visitor->createDocument(null, null, false);
- $visitor->document->appendChild($violationNode = $visitor->document->createElement('violation'));
- $visitor->setCurrentNode($violationNode);
- } else {
- $visitor->getCurrentNode()->appendChild(
- $violationNode = $visitor->document->createElement('violation')
- );
- }
- $violationNode->setAttribute('property_path', $violation->getPropertyPath());
- $violationNode->appendChild($messageNode = $visitor->document->createElement('message'));
- $messageNode->appendChild($visitor->document->createCDATASection($violation->getMessage()));
- }
- public function serializeViolationToJson(JsonSerializationVisitor $visitor, ConstraintViolation $violation, array $type = null)
- {
- $data = array(
- 'property_path' => $violation->getPropertyPath(),
- 'message' => $violation->getMessage()
- );
- if (null === $visitor->getRoot()) {
- $visitor->setRoot($data);
- }
- return $data;
- }
- public function serializeViolationToYml(YamlSerializationVisitor $visitor, ConstraintViolation $violation, array $type = null)
- {
- return array(
- 'property_path' => $violation->getPropertyPath(),
- 'message' => $violation->getMessage(),
- );
- }
- }
|