THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Creation d'une categorie

(20-11-2015 00:07:51)


Bonjour je souhaite créer une 'category'

Voici mon code :

$category = new Category();
$category->setParent(0);
$category->setVisible(TRUE);
$category->setPosition(1);
$category->setCreatedAt(new \DateTime('now'));
$category->setVersion(1);
$category->setVersionCreatedAt(new \DateTime('now'));
$category->setLocale($locale);
$category->setTitle($title);
$category->save();

sauf que j'ai cette erreur :

[RuntimeException]               
URL instance is not initialized.

Serais-ce en rapport avec la table 'rewriting_url' ? J'ai bien essayé de faire un category->setRewrittenUrl mais je ne comprend pas quoi mettre en 2ème paramètre.

Merci par avance !

Offline

#2 Re: Creation d'une categorie

(20-11-2015 01:12:30)


Tu ne dois pas créer une catégorie directement, mais t'appuyer sur l'action Category via l'event TheliaEvents::CATEGORY_CREATE (plus d'infos sur les actions ici : http://doc.thelia.net/en/documentation/ … tions.html)

        $createEvent = new CategoryCreateEvent();

        $createEvent
            ->setTitle($title)
            ->setLocale($locale)
            ->setParent(0)
            ->setVisible(true)
        ;

        $this->dispatch(TheliaEvents::CATEGORY_CREATE, $createEvent);

        $category = $createEvent->getCategory();

Si tu es dans un contrôleur, tu peux utiliser $this->dispatch() pour dispatcher l'event. Sinon, il faut te débrouiller pour récupérer le dispatcher.

L'action Category se charge de tout, et crée la catégorie. Les éventuels listeners de TheliaEvents::CATEGORY_CREATE sont aussi appelés.

Tu la récupères la catégorie créée avec $createEvent->getCategory();

Si tu veux modifier ta catégorie, tu procèderas de le même façon, en créant un CategoryUpdateEvent qui sera dispatché avec TheliaEvents::CATEGORY_UPDATE.

Tu peux trouver des exemples de ce genre de manips dans la classe CategoriesImport du module ImportT1.


OpenStudio Toulouse

Offline

#3 Re: Creation d'une categorie

(20-11-2015 11:44:44)


Hello,

Merci roadster31

Je souhaiterais effectuer cette action dans un service.
Pourrais-tu me dire comment appeler le dispatcher dans un service stp ?
Merci encore

Offline

#4 Re: Creation d'une categorie

(20-11-2015 15:36:17)


Un service ? Il te suffit alors d'injecter le dispatcher lors de la déclaration dans le config.xml :

        <service id="ton_service" class="Full/Qualified/ClassName">
            <argument type="service" id="event_dispatcher"/>
        </service>

Dans le constructeur de ta classe, tu recevras le dispatcher :

public __construct(EventDispatcher $dispatcher)
{
...
}

Si ton "service" est déjà un EventListener, et que tu es dans un méthode qui as reçu un event, tu as le dispatcher dans l'event : $event->getDispatcher()->dispatch(...)


OpenStudio Toulouse

Offline

#5 Re: Creation d'une categorie

(21-11-2015 20:14:00)


Hello,

encore merci pour ton aide.
J'en arrive a la même conclusion. Le code s’exécute correctement mais lors de la création de la catégorie en utilisant l'action CATEGORY comme tu me l'a expliqué j'ai ce message en retour :

[red]
[RuntimeException]               
URL instance is not initialized.
[/red]

Je précise que j'execute ce code depuis une commande.
Le message d'erreur est exécuter depuis la fonction getInstance() (Return this class instance, only once instanciated.) dans le fichier \Thelia\Tools\URL

Cette fonction est lancé depuis la fonction postInsert puis generateRewrittenUrl du fichier \Thelia\Model\CategoryI18n.php

Une idée ? Merci

Last edited by siciliano21 (21-11-2015 22:14:45)

Offline

#6 Re: Creation d'une categorie

(22-11-2015 11:05:49)


Dans une commande (Thelia\Command), il te faut initialiser cette classe. Le plus simple est de la demander au container :

$this->container->get('thelia.url.manager');

Et ça devrait suffire.


OpenStudio Toulouse

Offline

#7 Re: Creation d'une categorie

(22-11-2015 13:22:00)


Super merci beaucoup ! sa fonctionne a la perfection !