标签: jmsserializerbundle

JMSSerializer和FOSRestBundle - 注释不起作用."不存在"

我试图使用ExclusionPolicy,但我不断得到"注释不存在,或无法自动加载"错误.

这是抛出的确切错误:

[语义错误] Acme\DemoBundle\Entity\Attributes类中的注释"@JMS\SerializerBundle\Annotation\ExclusionPolicy"不存在,或者无法自动加载.

我的代码如下:

namespace Acme\DemoBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints;
use JMS\SerializerBundle\Annotation\ExclusionPolicy;
use JMS\SerializerBundle\Annotation\Expose;

/**
 * Acme\DemoBundle\Entity\Attributes
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\AttributesRepository")
 * 
 * @ExclusionPolicy("all")
 */
class Attributes
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

php data-annotations symfony fosrestbundle jmsserializerbundle

5
推荐指数
1
解决办法
3719
查看次数

FOSUserBundle + JMSSerializerBundle +暴露额外字段

User使用一个附加字段序列化实例时出现问题$name,这会从FOSUserBundle扩展基本用户:

<?php
namespace AppBundle\Entity\User;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;

/**
 * User
 */
class User extends BaseUser
{
    /**
     * @var string
     */
    private $name;

    /**
     * Set name
     * @param string $name
     * @return User
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
}
Run Code Online (Sandbox Code Playgroud)

为简化起见,我需要仅$salt使用用户实体公开字段JMSSerializerBundle

#AppBundle\Resources\config\serializer\Model.User.yml
FOS\UserBundle\Model\User:
    exclusion_policy: all
    properties:
        salt: …
Run Code Online (Sandbox Code Playgroud)

symfony fosuserbundle jmsserializerbundle

5
推荐指数
1
解决办法
2964
查看次数

JMS Serializer没有序列化子类

我有JMS序列化程序的问题.当我使用组时,JMS不会序列化我的子类,但是当我不使用组时,一切都没问题.我做错了什么?

    $context = SerializationContext::create()->enableMaxDepthChecks();
    $context->setGroups(['clientapi']);

    $contextWithoutGroup = SerializationContext::create()->enableMaxDepthChecks();

    /** @var Serializer $serializer */
    $serializer = $this->container->get('jms_serializer');
    $dataClientApi = $serializer->serialize($documentBundle->getFolderDocumentsForClientApi(
        $this->getUserFromParam($params), $folder, $categories, $tags
    ), 'json', $context);

    $dataWithout = $serializer->serialize($documentBundle->getFolderDocumentsForClientApi(
        $this->getUserFromParam($params), $folder, $categories, $tags
    ), 'json', $$contextWithoutGroup);
Run Code Online (Sandbox Code Playgroud)

给:

$dataClientApi = '{"0":{"author":{}}}';
$dataWithout = '{"0":{"author":{id: 2}}}';
Run Code Online (Sandbox Code Playgroud)

那是我的课程.家长:

/**
 * Document
 *
 * @ORM\Table(name="documents")
 * @ORM\Entity(repositoryClass="AppBundle\Entity\DocumentRepository")
 * @ORM\EntityListeners({"DocumentListener"})
 * @JMS\ExclusionPolicy("all")
 * @JMS\AccessorOrder("custom", custom = {"id", "folderId", "title"})
 */
class Document implements ResourceInterface
{

    use Traits\SortableTrait;
    use Traits\TimestampableTrait;

    /**
     * @var integer
     *
     * …
Run Code Online (Sandbox Code Playgroud)

php symfony jmsserializerbundle jms-serializer symfony-2.8

5
推荐指数
1
解决办法
1388
查看次数

JMS序列化程序yml日期时间格式

我有一个基于Symfony 2.7 Framework构建的Rest API,带有FOSRestBundle和JMSSerializerBundle.我看看yml 参考注释.

我已经选择定义我的模型的每个实体如何用yml序列化.

我已经看到我们可以Datetime按特定格式序列化对象:

@JMS\Type("DateTime<'d-m-Y'>")
Run Code Online (Sandbox Code Playgroud)

我不知道yml定义使用的正确语法,我试过:

my_field:
  expose: true
  type: datetime
  format: 'd-m-Y'
Run Code Online (Sandbox Code Playgroud)

my_field:
  expose: true
  type: datetime<'d-m-Y'>
Run Code Online (Sandbox Code Playgroud)

我不想使用,Annotations因为我有很多yaml文件.

该领域尚未序列化 ......

有人可以帮帮我吗?

serialization yaml symfony jmsserializerbundle

5
推荐指数
1
解决办法
4449
查看次数

在Symfony2中运行PHPUnit测试时,JMS Serializer无法读取配置

我正在使用JMSSerializer为我正在研究的S​​ymfony2项目创建JSON响应,并尝试为每个响应构建单元测试,但我正在尝试以下变体:

JMS\Serializer\Exception\RuntimeException: You must define a type for FooBundle\Entity\Bar::$name.
Run Code Online (Sandbox Code Playgroud)

我正在为序列化器使用YML配置,它在生成响应时非常有效.

#src/FooBundle/Resources/config/serializer/Entity.Bar.yml
FooBundle\Entity\Bar:
  exclusion_policy: none
    properties:
        id:
            exclude: true
            type: integer
        name:
            type: string
Run Code Online (Sandbox Code Playgroud)

我想知道是否需要以某种方式预加载配置并找到此链接:http: //jmsyst.com/libs/serializer/master/configuration,它说配置元数据路径但也包含文件后缀:

$serializer =
JMS\Serializer\SerializerBuilder::create()
    ->addMetadataDir($someDir)
    ->build();
Run Code Online (Sandbox Code Playgroud)

我在单元测试中生成序列化器时尝试设置config目录:

$serializer = SerializerBuilder::create()->addMetadataDir('path-to-dir')->build();
Run Code Online (Sandbox Code Playgroud)

但这并没有解决问题,我再次检查了文档页面,它告诉您列出文件的完整路径

"因此,如果您的类名为Vendor\Package\Foo,则元数据文件需要位于$ someDir/Vendor.Package.Foo.(xml | yml)."

但尝试得到生成:

JMS\Serializer\Exception\InvalidArgumentException: The directory "path-to-file" does not exist.
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗

谢谢

serialization phpunit serializer symfony jmsserializerbundle

4
推荐指数
1
解决办法
6158
查看次数

JMSSerializer 预期输入结束,但得到 T_NONE 类型的“/”

我正在使用 JMS 来序列化和反序列化我的实体我有一个批处理来生成一个 json 文件和其他读取该文件

我的实体有一个 DateTime 字段,如下所示

/**
 * @var \DateTime
 *
 * @ORM\Column(name="inscription_date", type="datetime", nullable=false)
 * @JMS\Type("DateTime<'d/m/Y'>")
 */
private $inscriptionDate;
Run Code Online (Sandbox Code Playgroud)

当实体被序列化时,结果是

"inscription_date":"30\/05\/2007"
Run Code Online (Sandbox Code Playgroud)

但问题是当我要反序列化我得到

[JMS\Parser\SyntaxErrorException]                                            
Expected end of input, but got "/" of type T_NONE at position 11 (0-based).
Run Code Online (Sandbox Code Playgroud)

注意:当我使用json_decode内置函数返回一个 stdClass 时没有问题


更新 1

似乎不是这个字段,我删除了原始序列化的字段,但仍然出现相同的错误。每个对象都在一行中序列化,每个对象由 PHP_EOL 分隔

这是数据的样本 people.json

{"name":"dexter","date":"13/04/2009", "doc": "1047516320" }
{"name":"deedee","date":"30/05/2013", "doc": "1047516325" }
Run Code Online (Sandbox Code Playgroud)

所有字段均有效且数据类型为数字或字符串

php serialization deserialization jmsserializerbundle

4
推荐指数
1
解决办法
3628
查看次数

使用FOSRestBundle将POST请求主体序列化为数组

我正在尝试使用Symfony 3和FOSRestBundle制作Rest Web服务。
我来自Spring + Jackson的背景,所以我正在努力做到这一点,以便您可以将对象作为请求主体传递给控制器​​,这些请求成为函数参数,并返回序列化为json的对象,到目前为止,我设法使其适用于一切除了数组。
这是我的代码:

组态:

#FOSRestBundle
fos_rest:
    param_fetcher_listener: true
    body_listener: 
        enabled: true
        decoders:
            json: fos_rest.decoder.json
    format_listener:
        rules:
            - { path: ^/, priorities: [ json ], fallback_format: json, prefer_extension: true }

    body_converter:
        enabled: true
        #validate: true

    view:
        mime_types:
            json: ['application/json', 'application/json;version=1.0', 'application/json;version=1.1']
        view_response_listener: 'force'
        formats:
            xml:  false
            json: true
        templating_formats:
            html: true

    exception:
        codes:
            'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404
            'Doctrine\ORM\OptimisticLockException': HTTP_CONFLICT
        messages:
            'Symfony\Component\Routing\Exception\ResourceNotFoundException': true
    allowed_methods_listener: true
    access_denied_listener:
        json: true
Run Code Online (Sandbox Code Playgroud)

这是控制器

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use JMS\DiExtraBundle\Annotation\Inject; …
Run Code Online (Sandbox Code Playgroud)

php rest symfony fosrestbundle jmsserializerbundle

4
推荐指数
1
解决办法
6003
查看次数

@JMS\Exclude 仅当属性为空时

我在我的项目中使用 JMS\Serializer 并且我只想在其中的数组为空时忽略一个属性。

我试过类似的东西:

@JMS\Exclude(if="count('$this->required') === 0")
or 
@JMS\Exclude(if="empty('required')")
Run Code Online (Sandbox Code Playgroud)

但出现语法错误。

谁可以帮我这个事?

谢谢。

symfony jmsserializerbundle jms-serializer

4
推荐指数
1
解决办法
2287
查看次数

JMSSerializerBundle在JSON中返回双精度字符串

所以我们JMSSerializerBundle在Symfony2项目中使用它为我们的客户生成一些JSON.它正在序列化我们的Doctrine2实体并且像魅力一样工作,但有一个例外.所有双精度/十进制值都是生成的JSON中的字符串,这使客户端感到困惑.

我们的序列化实体看起来像这样,我只在这里粘贴了相关的属性/ getter.

class Offer
{
    [...]

    /**
     * @var double $latitude
     *
     * @ORM\Column(name="latitude", type="decimal", precision=10, scale=7)
     * @Groups("offerlist")
     */
    private $latitude;

    /**
     * @var double $longitude
     *
     * @ORM\Column(name="longitude", type="decimal", precision=10, scale=7)
     * @Groups("offerlist")
     */
    private $longitude;

    [...]

    /**
     * Get latitude
     *
     * @return double
     */
    public function getLatitude()
    {
        return $this->latitude;
    }

    /**
     * Get longitude
     *
     * @return double
     */
    public function getLongitude()
    {
        return $this->longitude;
    }

    [...]
}
Run Code Online (Sandbox Code Playgroud)

纬度/经度值显示在JSON中,如下所示:

{
    "latitude" : …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm jmsserializerbundle

3
推荐指数
1
解决办法
1794
查看次数

JMS Serializer:覆盖 symfony 4 中的默认命名策略无效

我发现这个线程提出了一种巧妙的方法来全局覆盖 config.yml 中的默认命名策略

但这是针对 symfony 3 而我在 symfony 4 上,所以我config > packages > jms_serializer.yaml将这行添加到我的,但这根本没有效果。

jms_serializer:
  visitors:
    xml_serialization:
        format_output: '%kernel.debug%'
  property_naming:
    id: 'jms_serializer.identical_property_naming_strategy'
Run Code Online (Sandbox Code Playgroud)

有谁明白为什么?

SerializerInterface $serializer使用序列化程序进行依赖注入,因为无法从AbstractControllerSF4 中调用服务。Controller在 SF4 中已弃用。

symfony jmsserializerbundle jms-serializer

3
推荐指数
1
解决办法
1196
查看次数