Doctrine orm Zend 2条令2 Gedmo可翻译

Doctrine orm Zend 2条令2 Gedmo可翻译,doctrine-orm,zend-framework2,translation,Doctrine Orm,Zend Framework2,Translation,我试图在Zend Framework 2应用程序中使用条令2的Gedmo可翻译扩展 我有如下设置: 'doctrine' => array( 'eventmanager' => array( 'orm_default' => array( 'subscribers' => array( 'Gedmo\Translatable\TranslatableListener'

我试图在Zend Framework 2应用程序中使用条令2的Gedmo可翻译扩展

我有如下设置:

'doctrine' => array(
    'eventmanager' => array(
        'orm_default' => array(
            'subscribers' => array(
                'Gedmo\Translatable\TranslatableListener'
            )
        )
    ),
    'driver' => array(
        'application_entities' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(__DIR__ . '/../src/Application/Entity')
        ),
        'translatable_metadata_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(
                'vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity',
            )
        ),
        'orm_default' => array(
            'drivers' => array(
                'Application\Entity' => 'application_entities',
                'Gedmo\Translatable\Entity' => 'translatable_metadata_driver'
            )
        )
    ),
),
样本实体:

<?php

namespace Application\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity (repositoryClass="Application\Repository\CategoryRepository") 
 */
class Category {

    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string")
     * @Gedmo\Translatable
     */
    private $name;

    /**
     * @Gedmo\Locale
     */
     private $locale;

}

很高兴帮助你

public function onBootstrap(MvcEvent $event)
{
    $serviceManager = $event->getApplication()->getServiceManager();

    $this->prepareGedmoTranslatable($serviceManager);
}

/**
 * Does initial config of Gedmo\TranslatableListener
 * sets default locale and registers it as service
 *
 * Reader you can ask why?
 * You will understand me if you try to use TranslatableListener yourself ;)
 *
 * @param ContainerInterface $services
 */
public function prepareGedmoTranslatable(ContainerInterface $services)
{
    /**
     * @var EventManager $ormEventManager
     */
    $ormEventManager      = $services->get('doctrine.eventmanager.orm_default');
    // assume that postLoad event has TranslatableListener as listener
    // it will be if TranslatableListener enabled in doctrine config
    // Doctrine\ORM\Events::postLoad
    $listeners            = $ormEventManager->getListeners(Events::postLoad);
    $translatableListener = null;

    // search for TranslatableListener cause Gedmo loves hardcore stuff ;)
    foreach ($listeners as $listener) {
        if ($listener instanceof TranslatableListener) {
            $translatableListener = $listener;
            break;
        }
    }

    if ($translatableListener instanceof TranslatableListener) {
        $translatableListener->setDefaultLocale(
            // assume that translator config provides default locale
            // e.g locale that have been set in config
            $services->get('config')['translator']['locale']
        );

        // let translations to fallback to default locale
        $translatableListener->getTranslationFallback(true);

        // lines below adds Listener as a service so you can access it by
        // $services->get(TranslatableListener::class)
        // everywhere you want
        $services->setAllowOverride(true);
        $services->setService(TranslatableListener::class, $translatableListener);
        $services->setAllowOverride(false);
    }
}