You are here

class CamelCaseToSnakeCaseNameConverter in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/serializer/NameConverter/CamelCaseToSnakeCaseNameConverter.php \Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter

CamelCase to Underscore name converter.

@author Kévin Dunglas <dunglas@gmail.com>

Hierarchy

Expanded class hierarchy of CamelCaseToSnakeCaseNameConverter

5 files declare their use of CamelCaseToSnakeCaseNameConverter
AbstractNormalizer.php in vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
CamelCaseToSnakeCaseNameConverterTest.php in vendor/symfony/serializer/Tests/NameConverter/CamelCaseToSnakeCaseNameConverterTest.php
GetSetMethodNormalizerTest.php in vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
ObjectNormalizerTest.php in vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
PropertyNormalizerTest.php in vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php

File

vendor/symfony/serializer/NameConverter/CamelCaseToSnakeCaseNameConverter.php, line 19

Namespace

Symfony\Component\Serializer\NameConverter
View source
class CamelCaseToSnakeCaseNameConverter implements NameConverterInterface {

  /**
   * @var array|null
   */
  private $attributes;

  /**
   * @var bool
   */
  private $lowerCamelCase;

  /**
   * @param null|array $attributes     The list of attributes to rename or null for all attributes.
   * @param bool       $lowerCamelCase Use lowerCamelCase style.
   */
  public function __construct(array $attributes = null, $lowerCamelCase = true) {
    $this->attributes = $attributes;
    $this->lowerCamelCase = $lowerCamelCase;
  }

  /**
   * {@inheritdoc}
   */
  public function normalize($propertyName) {
    if (null === $this->attributes || in_array($propertyName, $this->attributes)) {
      $snakeCasedName = '';
      $len = strlen($propertyName);
      for ($i = 0; $i < $len; ++$i) {
        if (ctype_upper($propertyName[$i])) {
          $snakeCasedName .= '_' . strtolower($propertyName[$i]);
        }
        else {
          $snakeCasedName .= strtolower($propertyName[$i]);
        }
      }
      return $snakeCasedName;
    }
    return $propertyName;
  }

  /**
   * {@inheritdoc}
   */
  public function denormalize($propertyName) {
    $camelCasedName = preg_replace_callback('/(^|_|\\.)+(.)/', function ($match) {
      return ('.' === $match[1] ? '_' : '') . strtoupper($match[2]);
    }, $propertyName);
    if ($this->lowerCamelCase) {
      $camelCasedName = lcfirst($camelCasedName);
    }
    if (null === $this->attributes || in_array($camelCasedName, $this->attributes)) {
      return $this->lowerCamelCase ? lcfirst($camelCasedName) : $camelCasedName;
    }
    return $propertyName;
  }

}

Members