序列化可翻译实体

时间:2017-07-27 09:08:35

标签: symfony serialization entity translation

要翻译我的实体产品,请使用下一个代码

django.server

可翻译使用DB product_translation中的表创建新实体ProductTranslation,其中包含id,translatable_id,locale和translatble属性。 翻译工作完美。在页面中只需写{{product.translation.en / sp.name}} 当使用ajax pagenation时,使用序列化器来返回数据。 尝试了JMS \ Serializer \ SerializerBuilder和Symfony \ Component \ Serializer \ Serializer

use Knp\DoctrineBehaviors\Model as ORMBehaviors;
class Product
{
    /**
     * @Groups({"prod_translate"})
     */
    use ORMBehaviors\Translatable\Translatable;
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @Groups({"prod"})
     */
    private $id;
...

没有组serializet返回“最大执行时间180秒”。 对于组,仅返回没有翻译的产品数据。

修复此问题需要做什么注释或操作?请帮忙!

修改 尝试使用下一个查询:

    use Symfony\Component\Serializer\Serializer;
    use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
    use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
    use Doctrine\Common\Annotations\AnnotationReader;
$products = $em->getRepository('AppBundle:Product')->findNextPageByBrandCategoryIds( array($cat), $brand, $offset, $limit );

    $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
            $normalizer = new ObjectNormalizer($classMetadataFactory);
            $normalizer->setCircularReferenceHandler(function ($object) {
                return $object->getID();
            });
            $serializer = new Serializer(array($normalizer));
            $jsonObject = $serializer->normalize($products, 'json', array('groups' => array('prod', 'prod_translate')) );

调试几乎每一行 - 他们是对的。

如果使用setHint(\ Doctrine \ ORM \ Query :: HINT_FORCE_PARTIAL_LOAD,true) - 工作但仅返回产品,不进行翻译。

2 个答案:

答案 0 :(得分:0)

Maximum execution time 180 second消息是与注释或序列化程序无关的错误。

在你的php.ini中,你有一个max_execution_time选项来配置脚本的限制,以秒为单位。您也可以使用函数set_time_limit($seconds)按代码进行设置,但我不建议您使用它。

无论如何,我敢打赌你正在做一个非常大的查询。你有多少结果限制?

答案 1 :(得分:0)

Nik修复此问题: 品牌,类别和产品实体

    use JMS\Serializer\Annotation\MaxDepth;
    /**
     * @MaxDepth(1)
    */
    private $products;
   /**
     * @MaxDepth(1)
      */
     private $categories;

     /**
    * @MaxDepth(1)
      */
     private $brand;