Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Symfony2 i Doctrine2
Forum PHP.pl > Forum > PHP > Frameworki
MWL
Witam, na wstępie piszę że nigdy jeszcze nie używałem Symfony.

Zacząłem się ostatnio bawić z Symfony2, wszystko wygląda bardzo fajnie, ale na mojej drodze w tutorialu pojawił się poważny problem, chodzi o Doctrine i Symfony2. Robię wszystko mniej więcej tak jak w tutorialu:

  1. $user = new User();
  2. $user->setName('Jonathan H. Wage');
  3.  
  4. $em = $this->get('doctrine.orm.entity_manager');
  5. $em->persist($user);
  6. $em->flush();


Taki oto kod jest w tutorialu, nie wiem nawet dokładnie co on robi, w każdym razie chciałbym to sprawdzić, jednak pomimo tego że klasę załadowałem prawidłowo (wszystko niby powinno działać) odrazu pojawia mi się informacja:

Class Acme\StudyBundle\Entity\User is not a valid entity or mapped super class.

Kod klasy User to:
  1. <?php
  2. // src/Acme/HelloBundle/Entity/User.php
  3. namespace Acme\StudyBundle\Entity;
  4.  
  5. use Doctrine\ORM\Mapping as ORM;
  6.  
  7. /**
  8.  * @ORM\Entity
  9.  * @ORM\Table(name="users")
  10.  */
  11. class User
  12. {
  13. /**
  14.   * @ORM\user_id
  15.   * @ORM\Column(type="integer")
  16.   */
  17. protected $user_id;
  18.  
  19. /**
  20.   * @ORM\Column(type="string", length="255")
  21.   */
  22. protected $user_name;
  23.  
  24. public function getId()
  25. {
  26. return $this->user_id;
  27. }
  28.  
  29. public function setName($user_name)
  30. {
  31. $this->user_name = $user_name;
  32. }
  33.  
  34. public function getName()
  35. {
  36. return $this->user_name;
  37. }
  38. }


ten kod też jest z tutoriala. Czy mógłby ktoś wytłumaczyć mi o co chodzi i co mam z tym zrobić? Będę wdzięczny smile.gif
Crozin
1. Nie rób burdelu i przestrzegaj jedynej słusznej konwencji nazewnictwa, czyli userName, userId (swoją drogą po co przedrostek "user") itd.
2. Jeżeli nie masz pojęcia jak działa Doctrine to zapoznaj się najpierw z nim - oszczędzisz sobie szmat czasu.
3. Błędem jest to, że Doctrine w ogóle nie wie o istnieniu klasy Acme\StudyBundle\Entity\User - najwidoczniej nie jest on wstanie poprawnie odczytać adnotacji.
4. Z Sf2 od ponad miesiąca nie miałem kontaktu, a widzę że zmienili co nieco sposób działania adnotacji - upewnij się, że poprawnie go stosujesz. Najbardziej aktualną dokumentację znajdziesz tutaj: https://github.com/symfony/symfony-docs
MWL
a wiesz co zrobić żeby o istnieniu klasy poinformoawać doctrine?
pejott
Musisz stworzyć mapping dla klasy by stała się entity.

http://www.doctrine-project.org/docs/orm/2...ic-mapping.html

W Symfony2 wygląda to nieco inaczej. Masz do wyboru aż 3 sposoby by zmapować swoje klasy.
YAML, XML i annotations czyli w komentarzach docblock.
Dobrym zwyczajem jeśli coś ma być open source jest używanie XML ze względu na to, że jest walidowany przez schema.
W Symfony pliki z mappingiem musisz umieścić w folderze Resources/config/doctrine.

Dla klasy TwojVendor\TwojeBundle\Entity\TwojEntity będzie to plik Resources/config/doctrine/TwojEntity.orm.xml. Dla XML.

Jest już pull request od Ryana z nową i uaktualnioną częścią Symfony Book dotyczącą Doctrine.
Poczekaj chwilkę i ona rozwieje Twoje wątpliwośći. https://github.com/symfony/symfony-docs/pull/366.

Pozdrawiam.

@edit: Twoje adnotacje nie działają, bo zapewne nie uruchomiłeś ich w DIC'u. Prościej mowiąc w pliku, w którym trzymasz konfigurację - domyślnie config.yml.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.