Mariusz Madanowski

Mariusz Madanowski Webdeveloper,
AGProjects

Temat: Pomoc w zgraniu razem Gedmo translatable i sluggable

Witam, mam pewien problem opisany tutaj: http://symfonylab.pl/forum/index.php/topic,613.0.html
Będę wdzięczny za jakąkolwiek pomoc :)Ten post został edytowany przez Autora dnia 29.01.15 o godzinie 21:55
Konrad Przybylski

Konrad Przybylski Myślący programista
PHP

Temat: Pomoc w zgraniu razem Gedmo translatable i sluggable

Na moje oko to co masz wskazane w dokumentacji:
<?php
$evm = new \Doctrine\Common\EventManager();
$sluggableListener = new \Gedmo\Sluggable\SluggableListener();
$evm->addEventSubscriber($sluggableListener);
$translatableListener = new \Gedmo\Translatable\TranslationListener();
$translatableListener->setTranslatableLocale('en_us');
$evm->addEventSubscriber($translatableListener);

Ty deklarujesz w pliku services,yml za pomocą:
gedmo.listener.sluggable:
class: Gedmo\Sluggable\SluggableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]

gedmo.listener.translatable:
class: Gedmo\Translatable\TranslatableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
- [ setDefaultLocale, [ %locale% ] ]
- [ setTranslationFallback, [ false ] ]

I teraz te eventy dodają się do dispatchera w takiej kolejności, jak wskazałeś w pliku. Powinno wystarczyć, jeśli zamienisz je kolejnością w pliku services.yml. Ale jeśli chcesz zrobić to dobrze, to do każdego z tych usług, dodaj wpis "priority", w ten sposób: (wydaje mi się, że wyższa wartosć spowoduje, że listener zostanie dopisany wcześniej)

tags:
- { name: doctrine.event_subscriber, connection: default, priority: 20 }
Mariusz Madanowski

Mariusz Madanowski Webdeveloper,
AGProjects

Temat: Pomoc w zgraniu razem Gedmo translatable i sluggable

W pliku services,yml deklaracje mam w prawidłowej kolejności, a priority niestety nie rozwiązuje problemu
Mariusz Madanowski

Mariusz Madanowski Webdeveloper,
AGProjects

Temat: Pomoc w zgraniu razem Gedmo translatable i sluggable

Problem już sam rozwiązałem. Wstawiam jakby ktoś w przyszłości miał problem.

W Entity dodałem w takiej kolejności:


use Gedmo\Sluggable\Sluggable;
use Gedmo\Translatable\Translatable;
use Gedmo\Mapping\Annotation as Gedmo;


A akcja w kontrolerze wygląda teraz tak:

public function addAction(Request $request)
{
if ($request->getMethod() == 'POST') {
$tag = new Tag();
$em = $this->getDoctrine()->getManager();

$formArray = $request->request->get('formTag');

$repository = $em->getRepository('PortalCmsBundle:Article');

$tag->setName($formArray['name']);
$tag->setCreated(new \DateTime('now', new \DateTimeZone('Europe/Warsaw')));

$validator = $this->get('validator');
$errors = $validator->validate($tag);

if (count($errors) > 0) {
foreach ($errors as $error) {
$this->message .= $error->getPropertyPath().' <-- '.$error->getMessage().'
';
}
} else {
$em->persist($tag);
if (isset($formArray['articles'])) {
foreach ($formArray['articles'] as $article_id) {
$article = $repository->find((int)$article_id);
$article_tag = new ArticleTag($article, $tag);
$em->persist($article_tag);
}
}
$em->flush();
$tag->setTranslatableLocale('en');
$tag->setName($formArray['name_en']);
$em->flush();
$tag->setTranslatableLocale('de');
$tag->setName($formArray['name_de']);
$em->flush();

$this->message = 'Tag dodany';
}

return $this->redirect($this->generateUrl(
'admin_tags',
array(
'message' => $this->message,
'messageType' => $this->messageType
)
));
}


I działa :)

Następna dyskusja:

[symfony2] - adminBundle + ...




Wyślij zaproszenie do