Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony 2] Przesiadka z symfony 1.4 i problem
Forum PHP.pl > Forum > PHP > Frameworki
muwie
Witam wszystkich.
Chcąc się rozwijać i iśc z duchem czasu przesiadłem się na Symfony 2. Postawienie przykładowej aplikacji poszło bez trudu. Nawet system TWIG jakoś szybko załapałem.
Stworzenie Bloga z jedna tabelą (posty) też poszło gładko. Problem zaczął się gdy chciałem zrobić relację pomiędzy tabelami.
Sposób ztąd nie działa. Albo jest error albo po zmianach wogole nie tworzy relacji. Więc pomyślałem, że może łatwiej będzie przy użyciu plików yml. Stworzyłem dwa pliki:
  1. Acme\StoreBundle\Entity\Product:
  2. type: entity
  3. repositoryClass: Acme\StoreBundle\Repository\ProductRepository
  4. table: product
  5. id:
  6. id:
  7. type: integer
  8. generator: { strategy: AUTO }
  9. fields:
  10. name:
  11. type: string
  12. length: 100
  13. price:
  14. type: decimal
  15. scale: 2
  16. description:
  17. type: text
  18. manyToOne:
  19. category:
  20. targetEntity: Category
  21. mappedBy: product

  1. Acme\StoreBundle\Entity\Category:
  2. type: entity
  3. table: category
  4. fields:
  5. id:
  6. type: integer
  7. id: true
  8. generator:
  9. strategy: AUTO
  10. name:
  11. type: string
  12. length: '255'
  13. lifecycleCallbacks: { }
  14. oneToMany:
  15. products:
  16. targetEntity: Product
  17. mappedBy: category
.
Ale nie wiem jak te pliki zmapowaćsad.gif
Komenda
  1. php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product

nie daje pożądanego rezultatu. Domyślam się, że musze podać typ pliku z jakiego chce mapować. Tylko gdzie to mam zmienić?
Proszę o pomoc.
destroyerr
Musisz ustawić sposób mapowania dla swojego bundle. Tutaj masz opis dokumentacji, sposób mapowania znajdziesz w ścieżce doctrine.orm.entity_managers.default. Szczegóły znajdziesz w sekcji Mapping Configuration.
muwie
Dla potomnych w poniższym linku jest to ładnie opisane
http://docs.pixel-web.org/symfony2/book/do...figuration.html
Ale terazmam kolejny problem.
W pliku confg.yml zapisałem zmiany w taki sposób
  1. # Doctrine Configuration
  2. doctrine:
  3. dbal:
  4. driver: %database_driver%
  5. host: %database_host%
  6. port: %database_port%
  7. dbname: %database_name%
  8. user: %database_user%
  9. password: %database_password%
  10. charset: UTF8
  11.  
  12. orm:
  13. auto_generate_proxy_classes: %kernel.debug%
  14. mappings:
  15. StoreBundle: yml
  16.  

Po wywołaniu komendy
  1. php app/console doctrine:generate:entities Acme

Dostaje, że mojego bundle nie ma albo nie jest właczony. Ale przecież jak robiłem schemat bazy za pomocą plików php było wszystko dobrze.
Pliki z schematami tabeli mam w Acme\StoreBundle\Entity\config\doctrine.
Jeszcze dla tych, którzy by nie wierzyli, że mam tego mojego bundle zarejestrowanego to wklejam plik AppKernel.php
  1. <?php
  2.  
  3. use Symfony\Component\HttpKernel\Kernel;
  4. use Symfony\Component\Config\Loader\LoaderInterface;
  5.  
  6. class AppKernel extends Kernel
  7. {
  8. public function registerBundles()
  9. {
  10. $bundles = array(
  11. new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
  12. new Symfony\Bundle\SecurityBundle\SecurityBundle(),
  13. new Symfony\Bundle\TwigBundle\TwigBundle(),
  14. new Symfony\Bundle\MonologBundle\MonologBundle(),
  15. new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
  16. new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
  17. new Symfony\Bundle\AsseticBundle\AsseticBundle(),
  18. new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
  19. new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
  20. new Acme\HelloBundle\AcmeHelloBundle(),
  21.  
  22. new Acme\WyboryBundle\AcmeWyboryBundle(),
  23. new Acme\StoreBundle\AcmeStoreBundle(),
  24. );
  25.  
  26. if (in_array($this->getEnvironment(), array('dev', 'test'))) {
  27. $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
  28. $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
  29. $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
  30. $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
  31. }
  32.  
  33. return $bundles;
  34. }
  35.  
  36. public function registerContainerConfiguration(LoaderInterface $loader)
  37. {
  38. $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
  39. }
  40. }

Dziękuje z góry za pomoc
destroyerr
Wyświetl sobie pomoc dla tej komendy. Jako argument musisz podać nazwę bundle, a nie tylko jej fragment, zresztą masz tam też przykłady.
muwie
Dzięki za pomoc. Jednak porzuciłem pliki yml. Trochę posiedziałem i rozgryzłem jak posługiwać się plikami php i metadanymi. Ale i tak dzięki za pomoc
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.