Selaa lähdekoodia

[sluggable] refactoring with a bc brake initial stage

gediminasm 13 vuotta sitten
vanhempi
commit
4bd132368b

+ 1 - 0
lib/Gedmo/Mapping/Annotation/Slug.php

@@ -17,6 +17,7 @@ use Doctrine\Common\Annotations\Annotation;
  */
 final class Slug extends Annotation
 {
+    public $fields = array();
     public $updatable = true;
     public $style = 'default'; // or "camel"
     public $unique = true;

+ 0 - 23
lib/Gedmo/Mapping/Annotation/Sluggable.php

@@ -1,23 +0,0 @@
-<?php
-
-namespace Gedmo\Mapping\Annotation;
-
-use Doctrine\Common\Annotations\Annotation;
-
-/**
- * Sluggable annotation for Sluggable behavioral extension
- *
- * @Annotation
- *
- * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
- * @package Gedmo.Mapping.Annotation
- * @subpackage Sluggable
- * @link http://www.gediminasm.org
- * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
- */
-final class Sluggable extends Annotation
-{
-    public $position = 0;
-    public $slugField = 'slug';
-}
-

+ 28 - 42
lib/Gedmo/Sluggable/Mapping/Driver/Annotation.php

@@ -23,11 +23,6 @@ use Gedmo\Mapping\Driver\AnnotationDriverInterface,
  */
 class Annotation implements AnnotationDriverInterface
 {
-    /**
-     * Annotation to mark field as sluggable and include it in slug building
-     */
-    const SLUGGABLE = 'Gedmo\\Mapping\\Annotation\\Sluggable';
-
     /**
      * Annotation to identify field as one which holds the slug
      * together with slug options
@@ -78,18 +73,7 @@ class Annotation implements AnnotationDriverInterface
      * {@inheritDoc}
      */
     public function validateFullMetadata(ClassMetadata $meta, array $config)
-    {
-        if ($config) {
-            if (!isset($config['fields'])) {
-                throw new InvalidMappingException("Unable to find any sluggable fields specified for Sluggable entity - {$meta->name}");
-            }
-            foreach ($config['fields'] as $slugField => $fields) {
-                if (!isset($config['slugFields'][$slugField])) {
-                    throw new InvalidMappingException("Unable to find {$slugField} slugField specified for Sluggable entity - {$meta->name}, you should specify slugField annotation property");
-                }
-            }
-        }
-    }
+    {}
 
     /**
      * {@inheritDoc}
@@ -104,21 +88,6 @@ class Annotation implements AnnotationDriverInterface
             ) {
                 continue;
             }
-            // sluggable property
-            if ($sluggable = $this->reader->getPropertyAnnotation($property, self::SLUGGABLE)) {
-                $field = $property->getName();
-                if (!$meta->hasField($field)) {
-                    throw new InvalidMappingException("Unable to find sluggable [{$field}] as mapped property in entity - {$meta->name}");
-                }
-                if (!$this->isValidField($meta, $field)) {
-                    throw new InvalidMappingException("Cannot slug field - [{$field}] type is not valid and must be 'string' in class - {$meta->name}");
-                }
-                if (!is_null($sluggable->slugField) and !$meta->hasField($sluggable->slugField)) {
-
-                    throw new InvalidMappingException(sprintf('The "%s" property - which is defined as the "slugField" for the "%s" property - does not exist or is not mapped to Doctrine in "%s"', $sluggable->slugField, $field, $meta->name));
-                }
-                $config['fields'][$sluggable->slugField][] = array('field' => $field, 'position' => $sluggable->position, 'slugField' => $sluggable->slugField);
-            }
             // slug property
             if ($slug = $this->reader->getPropertyAnnotation($property, self::SLUG)) {
                 $field = $property->getName();
@@ -126,9 +95,10 @@ class Annotation implements AnnotationDriverInterface
                     throw new InvalidMappingException("Unable to find slug [{$field}] as mapped property in entity - {$meta->name}");
                 }
                 if (!$this->isValidField($meta, $field)) {
-                    throw new InvalidMappingException("Cannot use field - [{$field}] for slug storage, type is not valid and must be 'string' in class - {$meta->name}");
+                    throw new InvalidMappingException("Cannot use field - [{$field}] for slug storage, type is not valid and must be 'string' or 'text' in class - {$meta->name}");
                 }
                 // process slug handlers
+                $handlers = array();
                 if (is_array($slug->handlers) && $slug->handlers) {
                     foreach ($slug->handlers as $handler) {
                         if (!$handler instanceof SlugHandler) {
@@ -138,7 +108,7 @@ class Annotation implements AnnotationDriverInterface
                             throw new InvalidMappingException("SlugHandler class: {$handler->class} should be a valid class name in entity - {$meta->name}");
                         }
                         $class = $handler->class;
-                        $config['handlers'][$class] = array();
+                        $handlers[$class] = array();
                         foreach ((array)$handler->options as $option) {
                             if (!$option instanceof SlugHandlerOption) {
                                 throw new InvalidMappingException("SlugHandlerOption: {$option} should be instance of SlugHandlerOption annotation in entity - {$meta->name}");
@@ -146,17 +116,33 @@ class Annotation implements AnnotationDriverInterface
                             if (!strlen($option->name)) {
                                 throw new InvalidMappingException("SlugHandlerOption name: {$option->name} should be valid name in entity - {$meta->name}");
                             }
-                            $config['handlers'][$class][$option->name] = $option->value;
+                            $handlers[$class][$option->name] = $option->value;
                         }
-                        $class::validate($config['handlers'][$class], $meta);
+                        $class::validate($handlers[$class], $meta);
                     }
                 }
-
-                $config['slugFields'][$field]['slug'] = $field;
-                $config['slugFields'][$field]['style'] = $slug->style;
-                $config['slugFields'][$field]['updatable'] = $slug->updatable;
-                $config['slugFields'][$field]['unique'] = $slug->unique;
-                $config['slugFields'][$field]['separator'] = $slug->separator;
+                // process slug fields
+                if (empty($slug->fields) || !is_array($slug->fields)) {
+                    throw new InvalidMappingException("Slug must contain at least one field for slug generation in class - {$meta->name}");
+                }
+                foreach ($slug->fields as $slugField) {
+                    if (!$meta->hasField($slugField)) {
+                        throw new InvalidMappingException("Unable to find slug [{$slugField}] as mapped property in entity - {$meta->name}");
+                    }
+                    if (!$this->isValidField($meta, $slugField)) {
+                        throw new InvalidMappingException("Cannot use field - [{$slugField}] for slug storage, type is not valid and must be 'string' or 'text' in class - {$meta->name}");
+                    }
+                }
+                // set all options
+                $config['slugs'][$field] = array(
+                    'fields' => $slug->fields,
+                    'slug' => $field,
+                    'style' => $slug->style,
+                    'updatable' => $slug->updatable,
+                    'unique' => $slug->unique,
+                    'separator' => $slug->separator,
+                    'handlers' => $handlers
+                );
             }
         }
     }

+ 26 - 37
lib/Gedmo/Sluggable/SluggableListener.php

@@ -124,7 +124,7 @@ class SluggableListener extends MappedEventSubscriber
             if ($config = $this->getConfiguration($om, $meta->name)) {
                 // generate first to exclude this object from similar persisted slugs result
                 $this->generateSlug($ea, $object);
-                foreach ($config['fields'] as $slugField => $fieldsForSlugField) {
+                foreach ($config['slugs'] as $slugField => $options) {
                     $slug = $meta->getReflectionProperty($slugField)->getValue($object);
                     $this->persistedSlugs[$config['useObjectClass']][$slugField][] = $slug;
                 }
@@ -135,8 +135,8 @@ class SluggableListener extends MappedEventSubscriber
         foreach ($ea->getScheduledObjectUpdates($uow) as $object) {
             $meta = $om->getClassMetadata(get_class($object));
             if ($config = $this->getConfiguration($om, $meta->name)) {
-                foreach ($config['slugFields'] as $slugField) {
-                    if ($slugField['updatable']) {
+                foreach ($config['slugs'] as $slugField => $options) {
+                    if ($options['updatable']) {
                         $this->generateSlug($ea, $object);
                     }
                 }
@@ -182,48 +182,41 @@ class SluggableListener extends MappedEventSubscriber
         $uow = $om->getUnitOfWork();
         $changeSet = $ea->getObjectChangeSet($uow, $object);
         $config = $this->getConfiguration($om, $meta->name);
-        foreach ($config['fields'] as $slugField => $fieldsForSlugField) {
-            // sort sluggable fields by position
-            $fields = $fieldsForSlugField;
-            usort($fields, function($a, $b) {
-                if ($a['position'] == $b['position']) {
-                    return 1;
-                }
-                return ($a['position'] < $b['position']) ? -1 : 1;
-            });
-
-            $slugFieldConfig = $config['slugFields'][$slugField];
+        foreach ($config['slugs'] as $slugField => $options) {
+            $hasHandlers = count($options['handlers']);
+            $fields = $options['fields'];
+            //$slugFieldConfig = $config['slugFields'][$slugField];
             // collect the slug from fields
             $slug = '';
             $needToChangeSlug = false;
-            foreach ($fields as $sluggableField) {
-                if (isset($changeSet[$sluggableField['field']])) {
+            foreach ($options['fields'] as $sluggableField) {
+                if (isset($changeSet[$sluggableField])) {
                     $needToChangeSlug = true;
                 }
-                $slug .= $meta->getReflectionProperty($sluggableField['field'])->getValue($object) . ' ';
+                $slug .= $meta->getReflectionProperty($sluggableField)->getValue($object) . ' ';
             }
             // notify slug handlers --> onChangeDecision
-            if (isset($config['handlers'])) {
-                foreach ($config['handlers'] as $class => $options) {
+            if ($hasHandlers) {
+                foreach ($options['handlers'] as $class => $handlerOptions) {
                     $this
                         ->getHandler($class)
-                        ->onChangeDecision($ea, $slugFieldConfig, $object, $slug, $needToChangeSlug)
+                        ->onChangeDecision($ea, $options, $object, $slug, $needToChangeSlug)
                     ;
                 }
             }
             // if slug is changed, do further processing
             if ($needToChangeSlug) {
-                $mapping = $meta->getFieldMapping($slugFieldConfig['slug']);
+                $mapping = $meta->getFieldMapping($slugField);
                 if (!strlen(trim($slug)) && (!isset($mapping['nullable']) || !$mapping['nullable'])) {
                     throw new \Gedmo\Exception\UnexpectedValueException("Unable to find any non empty sluggable fields for slug [{$slugField}] , make sure they have something at least.");
                 }
 
                 // notify slug handlers --> postSlugBuild
-                if (isset($config['handlers'])) {
-                    foreach ($config['handlers'] as $class => $options) {
+                if ($hasHandlers) {
+                    foreach ($options['handlers'] as $class => $handlerOptions) {
                         $this
                             ->getHandler($class)
-                            ->postSlugBuild($ea, $slugFieldConfig, $object, $slug)
+                            ->postSlugBuild($ea, $options, $object, $slug)
                         ;
                     }
                 }
@@ -231,13 +224,13 @@ class SluggableListener extends MappedEventSubscriber
                 // build the slug
                 $slug = call_user_func_array(
                     $this->transliterator,
-                    array($slug, $slugFieldConfig['separator'], $object)
+                    array($slug, $options['separator'], $object)
                 );
                 // stylize the slug
-                switch ($slugFieldConfig['style']) {
+                switch ($options['style']) {
                     case 'camel':
                         $slug = preg_replace_callback(
-                            '@^[a-z]|' . $slugFieldConfig['separator'] . '[a-z]@smi',
+                            '@^[a-z]|' . $options['separator'] . '[a-z]@smi',
                             create_function('$m', 'return strtoupper($m[0]);'),
                             $slug
                         );
@@ -257,23 +250,23 @@ class SluggableListener extends MappedEventSubscriber
                     $slug = null;
                 }
                 // make unique slug if requested
-                if ($slugFieldConfig['unique'] && !is_null($slug)) {
+                if ($options['unique'] && !is_null($slug)) {
                     $this->exponent = 0;
-                    $arrayConfig = $slugFieldConfig;
+                    $arrayConfig = $options;
                     $arrayConfig['useObjectClass'] = $config['useObjectClass'];
                     $slug = $this->makeUniqueSlug($ea, $object, $slug, false, $arrayConfig);
                 }
                 // notify slug handlers --> onSlugCompletion
-                if (isset($config['handlers'])) {
-                    foreach ($config['handlers'] as $class => $options) {
+                if ($hasHandlers) {
+                    foreach ($options['handlers'] as $class => $handlerOptions) {
                         $this
                             ->getHandler($class)
-                            ->onSlugCompletion($ea, $slugFieldConfig, $object, $slug)
+                            ->onSlugCompletion($ea, $options, $object, $slug)
                         ;
                     }
                 }
                 // set the final slug
-                $meta->getReflectionProperty($slugFieldConfig['slug'])->setValue($object, $slug);
+                $meta->getReflectionProperty($slugField)->setValue($object, $slug);
                 // recompute changeset
                 $ea->recomputeSingleObjectChangeSet($uow, $meta, $object);
             }
@@ -293,10 +286,6 @@ class SluggableListener extends MappedEventSubscriber
     {
         $om = $ea->getObjectManager();
         $meta = $om->getClassMetadata(get_class($object));
-        if (count ($config) == 0)
-        {
-            $config = $this->getConfiguration($om, $meta->name);
-        }
         // search for similar slug
         $result = $ea->getSimilarSlugs($object, $meta, $config, $preferedSlug);
         // add similar persisted slugs into account

+ 1 - 3
tests/Gedmo/Sluggable/Fixture/Article.php

@@ -15,19 +15,17 @@ class Article implements Sluggable
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(name="title", type="string", length=64)
      */
     private $title;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(name="code", type="string", length=16)
      */
     private $code;
 
     /**
-     * @Gedmo\Slug(separator="-", updatable=true)
+     * @Gedmo\Slug(separator="-", updatable=true, fields={"title", "code"})
      * @ORM\Column(name="slug", type="string", length=64, unique=true)
      */
     private $slug;

+ 1 - 3
tests/Gedmo/Sluggable/Fixture/ConfigurationArticle.php

@@ -15,19 +15,17 @@ class ConfigurationArticle implements Sluggable
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(name="title", type="string", length=64)
      */
     private $title;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(name="code", type="string", length=16)
      */
     private $code;
 
     /**
-     * @Gedmo\Slug(updatable=false, unique=false)
+     * @Gedmo\Slug(updatable=false, unique=false, fields={"title", "code"})
      * @ORM\Column(name="slug", type="string", length=32)
      */
     private $slug;

+ 1 - 3
tests/Gedmo/Sluggable/Fixture/Document/Article.php

@@ -14,13 +14,11 @@ class Article
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ODM\String
      */
     private $title;
 
     /**
-     * @Gedmo\Sluggable
      * @ODM\String
      */
     private $code;
@@ -32,7 +30,7 @@ class Article
      *          @Gedmo\SlugHandlerOption(name="mappedBy", value="article"),
      *          @Gedmo\SlugHandlerOption(name="inverseSlugField", value="alias")
      *      })
-     * }, separator="-", updatable=true)
+     * }, separator="-", updatable=true, fields={"title", "code"})
      * @ODM\String
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Document/RelativeSlug.php

@@ -16,7 +16,6 @@ class RelativeSlug
     private $id;
 
     /**
-     * @Gedmo\Sluggable(slugField="alias")
      * @ODM\String
      */
     private $title;
@@ -28,7 +27,7 @@ class RelativeSlug
      *          @Gedmo\SlugHandlerOption(name="relationSlugField", value="slug"),
      *          @Gedmo\SlugHandlerOption(name="separator", value="/")
      *      })
-     * }, separator="-", updatable=true)
+     * }, separator="-", updatable=true, fields={"title"})
      * @ODM\String
      */
     private $alias;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Document/TreeSlug.php

@@ -16,7 +16,6 @@ class TreeSlug
     private $id;
 
     /**
-     * @Gedmo\Sluggable(slugField="alias")
      * @ODM\String
      */
     private $title;
@@ -27,7 +26,7 @@ class TreeSlug
      *          @Gedmo\SlugHandlerOption(name="parentRelationField", value="parent"),
      *          @Gedmo\SlugHandlerOption(name="separator", value="/")
      *      })
-     * }, separator="-", updatable=true)
+     * }, separator="-", updatable=true, fields={"title"})
      * @ODM\String
      */
     private $alias;

+ 1 - 3
tests/Gedmo/Sluggable/Fixture/Handler/Article.php

@@ -15,13 +15,11 @@ class Article implements Sluggable
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(name="title", type="string", length=64)
      */
     private $title;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(name="code", type="string", length=16)
      */
     private $code;
@@ -33,7 +31,7 @@ class Article implements Sluggable
      *          @Gedmo\SlugHandlerOption(name="mappedBy", value="article"),
      *          @Gedmo\SlugHandlerOption(name="inverseSlugField", value="slug")
      *      })
-     * }, separator="-", updatable=true)
+     * }, separator="-", updatable=true, fields={"title", "code"})
      * @ORM\Column(name="slug", type="string", length=64, unique=true)
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Handler/ArticleRelativeSlug.php

@@ -18,7 +18,6 @@ class ArticleRelativeSlug
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(length=64)
      */
     private $title;
@@ -30,7 +29,7 @@ class ArticleRelativeSlug
      *          @Gedmo\SlugHandlerOption(name="relationSlugField", value="slug"),
      *          @Gedmo\SlugHandlerOption(name="separator", value="/")
      *      })
-     * }, separator="-", updatable=true)
+     * }, separator="-", updatable=true, fields={"title"})
      * @ORM\Column(name="slug", type="string", length=64, unique=true)
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Handler/People/Occupation.php

@@ -19,7 +19,6 @@ class Occupation
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(length=64)
      */
     private $title;
@@ -35,7 +34,7 @@ class Occupation
      *          @Gedmo\SlugHandlerOption(name="mappedBy", value="occupation"),
      *          @Gedmo\SlugHandlerOption(name="inverseSlugField", value="slug")
      *      })
-     * })
+     * }, fields={"title"})
      * @ORM\Column(length=64, unique=true)
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Handler/People/Person.php

@@ -18,7 +18,6 @@ class Person
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(length=64)
      */
     private $name;
@@ -30,7 +29,7 @@ class Person
      *          @Gedmo\SlugHandlerOption(name="relationSlugField", value="slug"),
      *          @Gedmo\SlugHandlerOption(name="separator", value="/")
      *      })
-     * }, separator="-", updatable=true)
+     * }, separator="-", updatable=true, fields={"name"})
      * @ORM\Column(name="slug", type="string", length=64, unique=true)
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Handler/TreeSlug.php

@@ -19,7 +19,6 @@ class TreeSlug
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(name="title", type="string", length=64)
      */
     private $title;
@@ -30,7 +29,7 @@ class TreeSlug
      *          @Gedmo\SlugHandlerOption(name="parentRelationField", value="parent"),
      *          @Gedmo\SlugHandlerOption(name="separator", value="/")
      *      })
-     * }, separator="-", updatable=true)
+     * }, separator="-", updatable=true, fields={"title"})
      * @ORM\Column(name="slug", type="string", length=64, unique=true)
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Inheritance/Vehicle.php

@@ -24,13 +24,12 @@ class Vehicle
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(length=128)
      */
     private $title;
 
     /**
-     * @Gedmo\Slug
+     * @Gedmo\Slug(fields={"title"})
      * @ORM\Column(length=128, unique=true)
      */
     private $slug;

+ 0 - 1
tests/Gedmo/Sluggable/Fixture/Issue104/Car.php

@@ -11,7 +11,6 @@ use Gedmo\Mapping\Annotation as Gedmo;
 class Car extends Vehicle
 {
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(length=128)
      */
     protected $title;

+ 1 - 1
tests/Gedmo/Sluggable/Fixture/Issue104/Vehicle.php

@@ -23,7 +23,7 @@ class Vehicle
     protected $title;
 
     /**
-     * @Gedmo\Slug
+     * @Gedmo\Slug(fields={"title"})
      * @ORM\Column(length=128, unique=true)
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Issue131/Article.php

@@ -18,13 +18,12 @@ class Article
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(length=64)
      */
     private $title;
 
     /**
-     * @Gedmo\Slug(updatable=true, unique=true)
+     * @Gedmo\Slug(updatable=true, unique=true, fields={"title"})
      * @ORM\Column(length=64, unique=true, nullable=true)
      */
     private $slug;

+ 1 - 2
tests/Gedmo/Sluggable/Fixture/Page.php

@@ -18,13 +18,12 @@ class Page
     private $id;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(type="string", length=255)
      */
     private $content;
 
     /**
-     * @Gedmo\Slug(style="camel", separator="_")
+     * @Gedmo\Slug(style="camel", separator="_", fields={"content"})
      * @ORM\Column(type="string", length=128)
      */
     private $slug;

+ 1 - 5
tests/Gedmo/Sluggable/Fixture/Position.php

@@ -18,31 +18,27 @@ class Position
     private $id;
 
     /**
-     * @Gedmo\Sluggable(position=2)
      * @ORM\Column(length=16)
      */
     private $prop;
 
     /**
-     * @Gedmo\Sluggable(position=1)
      * @ORM\Column(length=64)
      */
     private $title;
 
     /**
-     * @Gedmo\Sluggable
      * @ORM\Column(length=16)
      */
     private $code;
 
     /**
-     * @Gedmo\Sluggable(position=0)
      * @ORM\Column(length=16)
      */
     private $other;
 
     /**
-     * @Gedmo\Slug
+     * @Gedmo\Slug(fields={"code", "other", "title", "prop"})
      * @ORM\Column(length=64, unique=true)
      */
     private $slug;

+ 6 - 9
tests/Gedmo/Sluggable/Fixture/TransArticleManySlug.php

@@ -21,33 +21,30 @@ class TransArticleManySlug implements Sluggable, Translatable
 
     /**
      * @Gedmo\Translatable
-     * @Gedmo\Sluggable(slugField="slug")
      * @ORM\Column(type="string", length=64)
      */
     private $title;
-    
+
     /**
-     * @Gedmo\Sluggable(slugField="uniqueSlug")
      * @ORM\Column(type="string", length=64)
      */
     private $uniqueTitle;
-    
+
     /**
-     * @Gedmo\Slug
+     * @Gedmo\Slug(fields={"uniqueTitle"})
      * @ORM\Column(type="string", length=128)
      */
     private $uniqueSlug;
 
     /**
      * @Gedmo\Translatable
-     * @Gedmo\Sluggable(slugField="slug")
      * @ORM\Column(type="string", length=16)
      */
     private $code;
 
     /**
      * @Gedmo\Translatable
-     * @Gedmo\Slug
+     * @Gedmo\Slug(fields={"title", "code"})
      * @ORM\Column(type="string", length=128)
      */
     private $slug;
@@ -88,7 +85,7 @@ class TransArticleManySlug implements Sluggable, Translatable
     {
         return $this->title;
     }
-    
+
     public function setUniqueTitle($uniqueTitle)
     {
         $this->uniqueTitle = $uniqueTitle;
@@ -113,7 +110,7 @@ class TransArticleManySlug implements Sluggable, Translatable
     {
         return $this->slug;
     }
-    
+
     public function getUniqueSlug()
     {
         return $this->uniqueSlug;

+ 1 - 3
tests/Gedmo/Sluggable/Fixture/TranslatableArticle.php

@@ -21,21 +21,19 @@ class TranslatableArticle implements Sluggable, Translatable
 
     /**
      * @Gedmo\Translatable
-     * @Gedmo\Sluggable
      * @ORM\Column(type="string", length=64)
      */
     private $title;
 
     /**
      * @Gedmo\Translatable
-     * @Gedmo\Sluggable
      * @ORM\Column(type="string", length=16)
      */
     private $code;
 
     /**
      * @Gedmo\Translatable
-     * @Gedmo\Slug
+     * @Gedmo\Slug(fields={"title", "code"})
      * @ORM\Column(type="string", length=128)
      */
     private $slug;