【问题标题】:Symfony 3 app customizing JSON outputSymfony 3 应用程序自定义 JSON 输出
【发布时间】:2016-04-15 05:51:10
【问题描述】:

在我的 Symfony 3 Web 应用程序中,我将一些 DB 行序列化为 Json,如下所示:

    $doc = $this->get ( 'doctrine' );
    $repo = $doc->getRepository ( 'AppBundle:Customer' );
    $result = $repo->createQueryBuilder ( 'c' )->setMaxResults(25)->getQuery ()->getResult ();

    $encoder = new JsonEncoder ();
    $normalizer = new GetSetMethodNormalizer ();

    $serializer = new Serializer ( array (
             new \AppBundle\DateTimeNormalizer(), $normalizer
    ), array (
            $encoder 
    ) );

    $json = $serializer->serialize ( $result, 'json' );

这会输出所需的数据,例如:

 {companyname:"Microsoft"}

为了(至少在最初)保持与旧系统的兼容性,我希望所有 Json 名称都是大写的,例如

 {COMPANYNAME:"Microsoft"}

解决这个问题的最佳方法是从以下方面着手:

  1. 编码器
  2. 规范器
  3. 序列化器
  4. 其他方式?

请简要描述建议的方法

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    您可以实现您的自定义 NameConverter 一个实现 NameConverterInterface 的类,并作为第二个参数传递给 GetSetMethodNormalizer。例如:

    <?php
    namespace AppBundle;
    
    use Symfony\Component\Serializer\NameConverter\NameConverterInterface;
    
    class ToUppercaseNameConverter implements NameConverterInterface
    {
    
        /**
         * Converts a property name to its normalized value.
         *
         * @param string $propertyName
         *
         * @return string
         */
        public function normalize($propertyName)
        {
            return strtoupper($propertyName);
        }
    
        /**
         * Converts a property name to its denormalized value.
         *
         * @param string $propertyName
         *
         * @return string
         */
        public function denormalize($propertyName)
        {
    
        }
    }
    ?>
    

    并按如下方式使用:

    $uppercaseConverter = new ToUppercaseNameConverter();
    $normalizer = new GetSetMethodNormalizer (null, $uppercaseConverter);
    

    你可以看看文档Converting Property Names when Serializing and Deserializing

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      相关资源
      最近更新 更多