Skip to content
This repository has been archived by the owner on Sep 30, 2021. It is now read-only.

Commit

Permalink
Move serializer to form
Browse files Browse the repository at this point in the history
Update src/Form/Serializer/BaseSerializerHandler.php

Co-Authored-By: Javier Spagnoletti <phansys@gmail.com>

Update src/Serializer/SerializerHandlerInterface.php

Co-Authored-By: Javier Spagnoletti <phansys@gmail.com>

Update src/Serializer/BaseSerializerHandler.php

Co-Authored-By: Javier Spagnoletti <phansys@gmail.com>

Update src/Form/Serializer/BaseSerializerHandler.php

Co-Authored-By: Javier Spagnoletti <phansys@gmail.com>

Update src/CoreBundle/Serializer/BaseSerializerHandler.php

Co-Authored-By: Javier Spagnoletti <phansys@gmail.com>

Update src/CoreBundle/Serializer/SerializerHandlerInterface.php

Co-Authored-By: Javier Spagnoletti <phansys@gmail.com>
  • Loading branch information
2 people authored and greg0ire committed Apr 15, 2020
1 parent f768283 commit 65a57fe
Show file tree
Hide file tree
Showing 7 changed files with 200 additions and 117 deletions.
2 changes: 1 addition & 1 deletion src/CoreBundle/DependencyInjection/SonataCoreExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
use Sonata\CoreBundle\Form\FormHelper;
use Sonata\CoreBundle\Form\Type\TranslatableChoiceType;
use Sonata\Doctrine\Bridge\Symfony\Bundle\SonataDoctrineBundle;
use Sonata\Form\Serializer\BaseSerializerHandler;
use Sonata\Form\Type\BooleanType;
use Sonata\Form\Type\CollectionType;
use Sonata\Form\Type\DateRangeType;
use Sonata\Form\Type\DateTimeRangeType;
use Sonata\Form\Type\EqualType;
use Sonata\Form\Type\ImmutableArrayType;
use Sonata\Serializer\BaseSerializerHandler;
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\FileLocator;
Expand Down
14 changes: 8 additions & 6 deletions src/CoreBundle/Serializer/BaseSerializerHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,26 @@

namespace Sonata\CoreBundle\Serializer;

if (!class_exists(\Sonata\Serializer\BaseSerializerHandler::class, false)) {
use Sonata\CoreBundle\Serializer\SerializerHandlerInterface as LegacySerializerHandlerInterface;

if (!class_exists(\Sonata\Form\Serializer\BaseSerializerHandler::class, false)) {
@trigger_error(
'The '.__NAMESPACE__.'\BaseSerializerHandler class is deprecated since version 3.13.0 and will be removed in 4.0.'
.' Use Sonata\Serializer\BaseSerializerHandler instead.',
'The '.__NAMESPACE__.'\BaseSerializerHandler class is deprecated since sonata-project/core-bundle 3.19.0 and will be removed in version 4.0.'
.' Use Sonata\Form\Serializer\BaseSerializerHandler instead.',
E_USER_DEPRECATED
);
}

class_alias(
\Sonata\Serializer\BaseSerializerHandler::class,
\Sonata\Form\Serializer\BaseSerializerHandler::class,
__NAMESPACE__.'\BaseSerializerHandler'
);

if (false) {
/**
* @deprecated since sonata-project/core-bundle 3.13.0, to be removed in 4.0.
* @deprecated since sonata-project/core-bundle 3.19.0, to be removed in 4.0.
*/
abstract class BaseSerializerHandler extends \Sonata\Serializer\BaseSerializerHandler implements SerializerHandlerInterface
abstract class BaseSerializerHandler extends \Sonata\Serializer\BaseSerializerHandler implements LegacySerializerHandlerInterface
{
}
}
10 changes: 5 additions & 5 deletions src/CoreBundle/Serializer/SerializerHandlerInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,22 @@

namespace Sonata\CoreBundle\Serializer;

if (!interface_exists(\Sonata\Serializer\SerializerHandlerInterface::class, false)) {
if (!interface_exists(\Sonata\Form\Serializer\SerializerHandlerInterface::class, false)) {
@trigger_error(
'The '.__NAMESPACE__.'\SerializerHandlerInterface class is deprecated since version 3.13.0 and will be removed in 4.0.'
.' Use Sonata\Serializer\SerializerHandlerInterface instead.',
'The '.__NAMESPACE__.'\SerializerHandlerInterface class is deprecated since sonata-project/core-bundle 3.19.0 and will be removed in version 4.0.'
.' Use Sonata\Form\Serializer\SerializerHandlerInterface instead.',
E_USER_DEPRECATED
);
}

class_alias(
\Sonata\Serializer\SerializerHandlerInterface::class,
\Sonata\Form\Serializer\SerializerHandlerInterface::class,
__NAMESPACE__.'\SerializerHandlerInterface'
);

if (false) {
/**
* @deprecated since sonata-project/core-bundle 3.13.0, to be removed in 4.0.
* @deprecated since sonata-project/core-bundle 3.19.0, to be removed in 4.0.
*/
interface SerializerHandlerInterface extends \Sonata\Serializer\SerializerHandlerInterface
{
Expand Down
120 changes: 120 additions & 0 deletions src/Form/Serializer/BaseSerializerHandler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
<?php

declare(strict_types=1);

/*
* This file is part of the Sonata Project package.
*
* (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Sonata\Form\Serializer;

use JMS\Serializer\Context;
use JMS\Serializer\GraphNavigator;
use JMS\Serializer\VisitorInterface;
use Sonata\CoreBundle\Model\ManagerInterface;

/**
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
abstract class BaseSerializerHandler implements SerializerHandlerInterface
{
/**
* @var ManagerInterface
*/
protected $manager;

/**
* @var string[]
*/
protected static $formats = [];

public function __construct(ManagerInterface $manager)
{
$this->manager = $manager;
}

/**
* @param string[] $formats
*/
final public static function setFormats(array $formats)
{
static::$formats = $formats;
}

/**
* @param string $format
*/
final public static function addFormat($format)
{
static::$formats[] = $format;
}

public static function getSubscribingMethods()
{
// NEXT_MAJOR : remove this block
if (null === static::$formats) {
static::$formats = ['json', 'xml', 'yml'];
@trigger_error(sprintf(
'%s::$formats has been set by default to array("json", "xml", "yml"). Ability to set them to a
different value is deprecated since sonata-project/core-bundle 3.0 and will be removed in version 4.0. Use "sonata_core.serializer.formats" configuration instead.',
__CLASS__
), E_USER_DEPRECATED);
}

$type = static::getType();
$methods = [];

foreach (static::$formats as $format) {
$methods[] = [
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'format' => $format,
'type' => $type,
'method' => 'serializeObjectToId',
];

$methods[] = [
'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
'format' => $format,
'type' => $type,
'method' => 'deserializeObjectFromId',
];
}

return $methods;
}

/**
* Serialize data object to id.
*
* @param object $data
*
* @return int|null
*/
public function serializeObjectToId(VisitorInterface $visitor, $data, array $type, Context $context)
{
$className = $this->manager->getClass();

if ($data instanceof $className) {
return $visitor->visitInteger($data->getId(), $type, $context);
}
}

/**
* Deserialize object from its id.
*
* @param int $data
*
* @return object|null
*/
public function deserializeObjectFromId(VisitorInterface $visitor, $data, array $type)
{
return $this->manager->findOneBy(['id' => $data]);
}
}

class_exists(\Sonata\CoreBundle\Serializer\BaseSerializerHandler::class);
29 changes: 29 additions & 0 deletions src/Form/Serializer/SerializerHandlerInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

/*
* This file is part of the Sonata Project package.
*
* (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Sonata\Form\Serializer;

use JMS\Serializer\Handler\SubscribingHandlerInterface;

/**
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
interface SerializerHandlerInterface extends SubscribingHandlerInterface
{
/**
* @return string
*/
public static function getType();
}

interface_exists(\Sonata\CoreBundle\Serializer\SerializerHandlerInterface::class);
113 changes: 16 additions & 97 deletions src/Serializer/BaseSerializerHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,108 +13,27 @@

namespace Sonata\Serializer;

use JMS\Serializer\Context;
use JMS\Serializer\GraphNavigator;
use JMS\Serializer\VisitorInterface;
use Sonata\CoreBundle\Model\ManagerInterface;

/**
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
abstract class BaseSerializerHandler implements SerializerHandlerInterface
{
/**
* @var ManagerInterface
*/
protected $manager;

/**
* @var string[]
*/
protected static $formats;

public function __construct(ManagerInterface $manager)
{
$this->manager = $manager;
}

/**
* @param string[] $formats
*/
final public static function setFormats(array $formats)
{
static::$formats = $formats;
}

/**
* @param string $format
*/
final public static function addFormat($format)
{
static::$formats[] = $format;
}

public static function getSubscribingMethods()
{
// NEXT_MAJOR : remove this block
if (null === static::$formats) {
static::$formats = ['json', 'xml', 'yml'];
@trigger_error(
'$formats has been set to default array("json", "xml", "yml"). Setting $formats to a
default array is deprecated since version 3.0 and will be removed in 4.0. Use SonataCoreBundle
configuration to add default serializer formats.',
E_USER_DEPRECATED
);
}

$type = static::getType();
$methods = [];

foreach (static::$formats as $format) {
$methods[] = [
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'format' => $format,
'type' => $type,
'method' => 'serializeObjectToId',
];

$methods[] = [
'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
'format' => $format,
'type' => $type,
'method' => 'deserializeObjectFromId',
];
}

return $methods;
}

/**
* Serialize data object to id.
*
* @param object $data
*
* @return int|null
*/
public function serializeObjectToId(VisitorInterface $visitor, $data, array $type, Context $context)
{
$className = $this->manager->getClass();
use Sonata\CoreBundle\Serializer\SerializerHandlerInterface as LegacySerializerHandlerInterface;

if (!class_exists(\Sonata\Form\Serializer\BaseSerializerHandler::class, false)) {
@trigger_error(
'The '.__NAMESPACE__.'\BaseSerializerHandler class is deprecated since sonata-project/core-bundle 3.19.0 and will be removed in version 4.0.'
.' Use Sonata\Form\Serializer\BaseSerializerHandler instead.',
E_USER_DEPRECATED
);
}

if ($data instanceof $className) {
return $visitor->visitInteger($data->getId(), $type, $context);
}
}
class_alias(
\Sonata\Form\Serializer\BaseSerializerHandler::class,
__NAMESPACE__.'\BaseSerializerHandler'
);

if (false) {
/**
* Deserialize object from its id.
*
* @param int $data
*
* @return object|null
* @deprecated since sonata-project/core-bundle 3.19.0, to be removed in 4.0.
*/
public function deserializeObjectFromId(VisitorInterface $visitor, $data, array $type)
abstract class BaseSerializerHandler extends \Sonata\Form\Serializer\BaseSerializerHandler implements LegacySerializerHandlerInterface
{
return $this->manager->findOneBy(['id' => $data]);
}
}

Expand Down
29 changes: 21 additions & 8 deletions src/Serializer/SerializerHandlerInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,30 @@

namespace Sonata\Serializer;

use JMS\Serializer\Handler\SubscribingHandlerInterface;
if (!interface_exists(\Sonata\Form\Serializer\SerializerHandlerInterface::class, false)) {
@trigger_error(
'The '.__NAMESPACE__.'\SerializerHandlerInterface class is deprecated since sonata-project/core-bundle 3.19.0 and will be removed in version 4.0.'
.' Use Sonata\Form\Serializer\SerializerHandlerInterface instead.',
E_USER_DEPRECATED
);
}

/**
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
interface SerializerHandlerInterface extends SubscribingHandlerInterface
{
class_alias(
\Sonata\Form\Serializer\SerializerHandlerInterface::class,
__NAMESPACE__.'\SerializerHandlerInterface'
);

if (false) {
/**
* @return string
* @deprecated since sonata-project/core-bundle 3.19.0, to be removed in 4.0.
*/
public static function getType();
interface SerializerHandlerInterface extends \Sonata\Form\Serializer\SerializerHandlerInterface
{
/**
* @return string
*/
public static function getType();
}
}

interface_exists(\Sonata\CoreBundle\Serializer\SerializerHandlerInterface::class);

0 comments on commit 65a57fe

Please sign in to comment.