• Вопрос про Custom Doctrine Sluggable Transliterator в Symfony 2?

    @igormukhin
    Если необходимо предварительно переводить с русского на английский:

    # services.yml
        app.transliterator:
            class: AppBundle\Gedmo\Sluggable\SluggableTransliterator
            arguments:
                - @remedge.yandex_translate.manager
    
        gedmo.listener.sluggable:
            class: Gedmo\Sluggable\SluggableListener
            tags:
                - { name: doctrine.event_subscriber, connection: default }
            calls:
                - [ setAnnotationReader, [ @annotation_reader ] ]
                - [ setTransliterator, [ [@app.transliterator, 'translate'] ] ]


    # AppBundle/Gedmo/Sluggable/SluggableTransliterator.php
    
    namespace AppBundle\Gedmo\Sluggable;
    
    use Gedmo\Sluggable\Util\Urlizer;
    use Remedge\YandexTranslateBundle\Manager\TranslateManager;
    
    class SluggableTransliterator extends Urlizer
    {
        /** @var TranslateManager */
        private $translator;
    
        /**
         * @param TranslateManager $translator
         */
        public function __construct(TranslateManager $translator)
        {
            $this->translator = $translator;
        }
    
        public function translate($text, $separator = '-')
        {
            $text = $this->translator->translate($text, 'ru-en');
            return self::urlize($text, $separator);
        }
    }


    Важно не переопределять в данном случае функцию transliterate, т.к. она статическая - лучше выбрать другое имя, например translate как в примере.
    Ответ написан
    Комментировать