浏览代码

Add Twig filter urlsafeid

Roel Sint 12 年之前
父节点
当前提交
ffde3358de
共有 3 个文件被更改,包括 36 次插入1 次删除
  1. 2 0
      Resources/config/twig.xml
  2. 32 0
      Twig/Extension/SonataAdminExtension.php
  3. 2 1
      composer.json

+ 2 - 0
Resources/config/twig.xml

@@ -7,6 +7,8 @@
     <services>
         <service id="sonata.admin.twig.extension" class="Sonata\AdminBundle\Twig\Extension\SonataAdminExtension">
             <tag name="twig.extension"/>
+
+            <argument type="service" id="sonata.admin.pool" />
         </service>
     </services>
 

+ 32 - 0
Twig/Extension/SonataAdminExtension.php

@@ -11,8 +11,10 @@
 
 namespace Sonata\AdminBundle\Twig\Extension;
 
+use Doctrine\Common\Util\ClassUtils;
 use Sonata\AdminBundle\Admin\FieldDescriptionInterface;
 use Sonata\AdminBundle\Exception\NoValueException;
+use Sonata\AdminBundle\Admin\Pool;
 
 class SonataAdminExtension extends \Twig_Extension
 {
@@ -21,6 +23,19 @@ class SonataAdminExtension extends \Twig_Extension
      */
     protected $environment;
 
+    /**
+     * @var Pool
+     */
+    protected $pool;
+
+    /**
+     * @param Pool $pool
+     */
+    public function __construct(Pool $pool)
+    {
+        $this->pool = $pool;
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -38,6 +53,7 @@ class SonataAdminExtension extends \Twig_Extension
             'render_list_element'     => new \Twig_Filter_Method($this, 'renderListElement', array('is_safe' => array('html'))),
             'render_view_element'     => new \Twig_Filter_Method($this, 'renderViewElement', array('is_safe' => array('html'))),
             'render_relation_element' => new \Twig_Filter_Method($this, 'renderRelationElement', array('is_safe' => array('html'))),
+            'sonata_urlsafeid'        => new \Twig_Filter_Method($this, 'getUrlsafeIdentifier'),
         );
     }
 
@@ -200,4 +216,20 @@ class SonataAdminExtension extends \Twig_Extension
 
         return call_user_func(array($element, $method));
     }
+
+    /**
+     * Get the identifiers as a string that is save to use in an url.
+     *
+     * @param object $model
+     *
+     * @return string string representation of the id that is save to use in an url
+     */
+    public function getUrlsafeIdentifier($model)
+    {
+        $admin = $this->pool->getAdminByClass(
+            ClassUtils::getClass($model)
+        );
+
+        return $admin->getUrlsafeIdentifier($model);
+    }
 }

+ 2 - 1
composer.json

@@ -29,7 +29,8 @@
         "knplabs/knp-menu-bundle": ">=1.1.0,<2.0.x-dev",
         "sonata-project/jquery-bundle": "dev-master",
         "sonata-project/exporter": "1.1.*",
-        "sonata-project/block-bundle": "dev-master"
+        "sonata-project/block-bundle": "dev-master",
+        "doctrine/common": ">=2.2,<3.0"
     },
     "require-dev": {
         "jms/translation-bundle": "*"