2013-02-20 7 views
5

Zaczynałem projekt Symfony2 od podstaw, gdzie następnie zainstalowałem FOSUserBundle.Użyj FOSUserBundle w odniesieniu do jednostek opartych na yml

Następnie napisałem (faktycznie wygenerowany za pomocą ORM Designer) kilka podmiotów, które muszą mieć relacje między nimi, oraz z jednostką User.

mam Items należące do Users, Collections należące do Users że grupa Items, i tak dalej.

Ponieważ użyłem FOSUserBundle mam tylko podstawowe klasy użytkownika (https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md, etap 3a) zdefiniowany za pomocą adnotacji, nie config/doctrine folder, a nie plik w nim User.yml.

Następnie utworzyłem folder MyBundle/Resources/config/doctrine i dodano wymienione powyżej pliki yml.

Kiedy próbuję generować obiekty za pomocą narzędzia wiersza polecenia, wszystko działa poprawnie: utworzy encje z moich plików yml.

Jednak w tym momencie próbuje załadować w przeglądarkach url gdzie login poprzednio pracował (gdy miałem tylko FOSUserBundle zainstalowany) rzuci ten błąd:

MappingException: No mapping file found named '/var/www/concert/src/X/MyBundle/Resources/config/doctrine/User.orm.yml' for class 'X\MyBundle\Entity\User'.

następujących czynności, takiej jako generowanie logiki CRUD, nie będzie działać tak długo, jak długo będę miał plik *.orm.ym lw folderze config/doctrine. Jeśli je usunę, generacja CRUD będzie działać, ale generowanie rzeczywistych tabel mysql nie będzie.

Żonglowanie tymi elementami prowadzi mnie do punktu, w którym mogę uzyskać tabele, ale wtedy rzeczywista aplikacja nie zadziała, jeśli spróbuję użyć dowolnego adresu URL, w którym jest zaangażowany nowo wygenerowany CRUD, ponieważ na podstawie yml (który usuwam, aby rzeczy działały ") nie będzie miał żadnej wiedzy na temat mapowania.

Czy to nieodłączne? Aby jednostki oparte na yml były w relacji z jednostką User na podstawie FOSUserBundle i nadal byłyby w stanie uzyskać ładne narzędzia do generowania wiersza polecenia?

Odpowiedz

6

Opisywany problem wynika z mieszania formatów konfiguracyjnych (yaml i ja zakładamy adnotacje). Możesz to łatwo naprawić, przerywając adnotacje w swoich modelach i zastępując je plikami yaml, tak jak robiłbyś to we własnych modelach.

Niestety FOSUserBundle-docs pokazują tylko, jak używać adnotacji, więc o to szybkie przekształcenie formatu YAML, gdy X \ MyBundle \ Entity \ User rozciąga FOSUSerBundle za UserEntity:

X\MyBundle\Entity\User: 
    type: entity 
    table: fos_user 
    id: 
     id: 
      type: integer 
      strategy: { generator: "AUTO" } 

Pozostałe rzeczy jest pod opieką FOSUserBundle, ponieważ BaseModel jest mapped-superclass i już opisuje rzeczy w User.orm.xml, ale równie dobrze można zastąpić istniejące wartości lub dodać dodatkowe wartości, tak jak zrobiłbyś to z własnymi modelami.

Jeśli nie używasz adnotacji w całej aplikacji, możesz również wyłączyć je w swoim app/config/config.yml, aby uniknąć efektów ubocznych.

+1

To całkowicie to zrobiło. Podejrzewałem, że musi to być jakaś wskazówka, którą mógłbym dać Symfony, aby to osiągnąć.Jedną z obserwacji jest to, że muszę również dodać linię w User.orm.yml, aby zdefiniować mapowanie tabeli, ponieważ domyślnie będzie ona szukała tabeli o nazwie user, więc dodałem tabelę: fos_user (nazwa, którą odziedziczyłem, gdy Wygenerowałem tabelę użytkowników z pakietu fos). – cbaltatescu

+1

Ups, masz rację, że 'table: fos_user' jest wspomniany w dokumentach, ale przegapiłem go w yaml. Naprawię to od razu. – dbrumann

+1

Jak skonfigurować dziedziczenie? Próbuję tego, ale 'php app/console doktryna: schema: update --dump-sql' zwraca' CREATE TABLE fos_user (id INT NOT NULL, PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'. Nie dodaje kolumn dziedziczenia. –

Powiązane problemy