Преглед изворни кода

Basic twig extension to provide filter access to serializer

Jonathan Bowers пре 13 година
родитељ
комит
6bbd319923
3 измењених фајлова са 82 додато и 1 уклоњено
  1. 9 1
      Resources/config/services.xml
  2. 40 0
      Tests/Twig/SerializerTest.php
  3. 33 0
      Twig/Serializer.php

+ 9 - 1
Resources/config/services.xml

@@ -25,6 +25,8 @@
         <parameter key="jms_serializer.version_exclusion_strategy.class">JMS\SerializerBundle\Serializer\Exclusion\VersionExclusionStrategy</parameter>
 
         <parameter key="jms_serializer.serializer.class">JMS\SerializerBundle\Serializer\LazyLoadingSerializer</parameter>
+
+        <parameter key="jms_serializer.twig.class">JMS\SerializerBundle\Twig\Serializer</parameter>
         
         <parameter key="jms_serializer.json_serialization_visitor.class">JMS\SerializerBundle\Serializer\JsonSerializationVisitor</parameter>
         <parameter key="jms_serializer.json_deserialization_visitor.class">JMS\SerializerBundle\Serializer\JsonDeserializationVisitor</parameter>
@@ -114,7 +116,13 @@
             <tag name="jms_serializer.serializer" />
         </service>
         <service id="serializer" alias="jms_serializer.serializer" />
-        
+
+        <!-- Twig Extension -->
+        <service id="jms_serializer.twig.serializer" class="%jms_serializer.twig.class%" public="false">
+            <argument type="service" id="serializer" />
+            <tag name="twig.extension" />
+        </service>
+
         <!-- Visitors -->
         <service id="jms_serializer.json_serialization_visitor" class="%jms_serializer.json_serialization_visitor.class%" public="false">
             <argument type="service" id="jms_serializer.naming_strategy" />

+ 40 - 0
Tests/Twig/SerializerTest.php

@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * Copyright 2011 Johannes M. Schmitt <schmittjoh@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace JMS\SerializerBundle\Tests\Twig;
+
+use JMS\SerializerBundle\Serializer\SerializerInterface;
+use JMS\SerializerBundle\Twig\Serializer as TwigSerializer;
+
+class SerializerTest extends \PHPUnit_Framework_TestCase
+{
+    public function setUp()
+    {
+        $this->mockSerializer = $this->getMock('JMS\SerializerBundle\Serializer\SerializerInterface');
+    }
+    public function testSerialize()
+    {
+      $obj = new \stdClass();
+      $this->mockSerializer
+        ->expects($this->once())
+        ->method('serialize')
+        ->with($this->equalTo($obj), $this->equalTo('json'));
+      $twigSerializer = new TwigSerializer($this->mockSerializer);
+      $twigSerializer->serialize($obj);
+    }
+}

+ 33 - 0
Twig/Serializer.php

@@ -0,0 +1,33 @@
+<?php
+namespace JMS\SerializerBundle\Twig;
+
+use JMS\SerializerBundle\Serializer\SerializerInterface;
+
+
+/**
+ * Serializer helper twig extension
+ * 
+ * Basically provides access to JMSSerializer from Twig
+ */
+class Serializer extends \Twig_Extension {
+  protected $serializer;
+
+  public function getName() {
+    return 'Serializer';
+  }
+
+  public function __construct(SerializerInterface $serializer)
+  {
+    $this->serializer = $serializer;
+  }
+
+  public function getFilters() {
+    return array(
+      'serialize'      => new \Twig_Filter_Method($this, 'serialize'),
+    );
+  }
+
+  public function serialize($object, $type = 'json') {
+    return $this->serializer->serialize($object, $type);
+  }
+}