Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Symfony2 i Doctrine2
MWL
post
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


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


--------------------
Wpadaj na mój kanał o PHP. Dużo mięsa 🥩!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
MWL
post
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


a wiesz co zrobić żeby o istnieniu klasy poinformoawać doctrine?

Ten post edytował MWL 4.06.2011, 18:09:42


--------------------
Wpadaj na mój kanał o PHP. Dużo mięsa 🥩!
Go to the top of the page
+Quote Post
pejott
post
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował pejott 5.06.2011, 08:12:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 13:39