Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][SF2] Ogólny temat
Forum PHP.pl > Forum > PHP > Frameworki
ziolo
Hej, założym ten temat z ogolnymi spostrzeżeniami na temat Sf2. Chętnie wysłucham opini co wam się podoba a co nie ?

Może zacznę od siebie.

Ja wcześniej pisałem na Symfony 1.4(Propel). Zacząłem w 2009 roku. Sporo na tym zrobiłem i nadal robię jeśli coś mam szybko zrobić, wiadomo, jak się coś zna błyskawicznie zastanawiam się tylko nad logiką aplikacji i kodowaniem.

Ale wiadomo trzeba się rozwijać i dlatego niedawno zacząłem przygodę z SF2 i bardziej perspektywiczne projekty już zacząłem w nim pisać.

Kilka moich uwag:
1) Brakuje mi schema.yml. To mi się odrazu spodobało w Symfony1. Jeden plik(yml), podgląd na całą strukturę danych w systemie, człowiek czuje się od razu Panem systuacji. Teraz używam annotations i definiowanie schematu w encjach. Może się przyzwyczaję, też wam tego brakuje ?
2) I18n - Baza danych trochę powiażane z punktem 1, wcześniej wszystko miałem w pliku schema.yml, teraz w sumie jeszcze nie pisałem aplikacji multijęzykowej na Symfony2 ale nie ma tego wbudowanego, można używać DoctrineExtensions, sam nie wiem czy sam coś nie użyje.
3) DoctrineMigrations, DoctrineFixtutes, super sprawa, wcześniej tego w 1 nie używałem, nie przypadło mi do gustu, ale to kapitalna sprawa i dużą przyjemność daje w Symfony2.
4) Łatwość tworzenia i używania formularzy w 2, naprawde świetne. Aż chce się pisać formularze, wszystko ładnie uproszczone w stosunku do 1.
5) Namespace - z samego początku sceptycznie podchodziłem do sprawy(deklarowanie namespacu i use w każdym pliku) Czy to na pewno dobry pomysł, lecz z biegiem czasu, gdy zacząłem tego używać, to jednak daję dużą przejrzystość kodu.
6) Pluginy - używam min FOSUserBundle, SonataAdmin, SonataUser wiadomo ogólnie standard, podoba mi się bardzo też w stosunku do 1 uproszczony mechanizm ich modyfikacji, przyznam się bez bicia czasami coś modyfikowałem w pluginach w SF1.4 dla ułatwienia, teraz oczywiście to odpada, super mechanizm(composer). Z minusów to zrezygnowałem z pluginu SonataMedia z jednej strony bardzo duża kobyła a z drugiej liczne błędy. Natomiast muszę napisać o rewelacyjnym: LiipImagineBundle. Super już nie muszę w adminie się martwić jakie rozmiary miniaturek generować. Teraz ten plugin robi to w locie w zależności od tego co będziemy potrzebować. SonataAdmin też używam, wcześniej w 1 byłem sceptycznie nastawiony do AdminGeneratora i sobie ręcznie zawsze kopiowałem standardowy mój panel.
7) ACL - na minus, może jeszcze za słabo poznałem ale integracja tego z SonataAdmin to koszmar, sam sobie to opracowałem, w danym modelu co prawda daje polę z userem czy grupą ale potem wiem o co chodzi wszędzie.
8) ServiceContainer - fajne te usługi, może jeszcze słabo znam i najcześciej wszstrzukuje do swoich usług sam container, ale potem mam do wszystkiego dostęp, mam nadzieję, że z nabieraniem doświadczenia co raz sprawniej będę się tym posługiwał.
9) Routing - tu się chyba nie wiele zmieniło.
10) Security - ogólnie kobyła, jeszcze muszę lepiej poznać, żeby być w tym temacie ekspertem, ale naprawdę super przypisywanie roli na podstawie prefiksów urli. Super.
11) Templating - generalnie tu nie odczuwam różnicy i przedtem podobał mi się php i teraz jest fajny twig.

A jekie są wasze uwagi na temat Symfony 2? Zapraszam do dyskusji.
Crozin
Mieszasz tu trochę Doctrine do Symfony, ale pomijając już to:

1. Adnotacje to tylko jeden ze sposobów na skonfigurowanie projektu. Nic nie stoi na przeszkodzie byś nadal korzystał z YAML-a.
8. Nie powinieneś tego robić. Tracisz w ten sposób większość, jeśli nie wszystkie zalety IoC.
ziolo
Cytat(Crozin @ 16.09.2013, 23:47:23 ) *
Mieszasz tu trochę Doctrine do Symfony, ale pomijając już to:

1. Adnotacje to tylko jeden ze sposobów na skonfigurowanie projektu. Nic nie stoi na przeszkodzie byś nadal korzystał z YAML-a.
8. Nie powinieneś tego robić. Tracisz w ten sposób większość, jeśli nie wszystkie zalety IoC.


Dzięki za opinie, faktycznie, trochę pomieszałem, ale ogólnie opisywałem cały framework z najpopularniejszymi komponentami.
Starałem się trzymać głównej lini w jakiej idzie rozwój frameworka. Np mało kto chyba pisze w Symfony2 z templetami w php.
Z adnotacjami tak samo, tak zobaczyłem domyślnie w dokumentacji i tego się już trzymałem. (Propel miał fajny prosty yml) To chyba tu byłą główna zaleta dla mnie wcześniej.

Co do IoC, to tak wiadomo gdy będę pisał coś bardziej rozbudowanego to tak już nie będe robił.

Ale obecnie dla standardowych rzeczy np listenerze dla wyjątków, czy robię coś złego w takim kodzie ?
Wstrzykuje mu tylko kontener usług, zamiast routera i sesji. Może będę potrzebował potem translatora albo entity managera.
Wiadomo, że tych rzeczy nie będę zmieniał tylko będę używał domyślnych.
Tak bym musiał dopisywać (settery, czy argumenty konstruktora), definicje usługi. A tak mam od razu.

  1. <?php
  2. namespace Priweb\AdminBundle\EventListener;
  3.  
  4. use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  9. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  10.  
  11.  
  12. class ExceptionListener
  13. {
  14. private $container;
  15.  
  16. public function onKernelException(GetResponseForExceptionEvent $event)
  17. {
  18. $exception = $event->getException();
  19. if ($exception instanceof AccessDeniedHttpException) {
  20. $this->container->get('session')->getFlashBag()->add('sonata_flash_error', 'Nie masz uprawnień do wykonania tej akcji');
  21. $event->setResponse(new RedirectResponse($this->container->get('router')->generate('sonata_admin_dashboard')));
  22. }
  23. if($exception instanceof NotFoundHttpException){
  24. $this->container->get('session')->getFlashBag()->add('error', 'Strony nie znaleziono');
  25. $event->setResponse(new RedirectResponse($this->container->get('router')->generate('homepage')));
  26. }
  27. }
  28.  
  29. public function setContainer($container)
  30. {
  31. $this->container = $container;
  32. }
  33.  
  34. }
  35.  
pedro84
Ja na przykład adnotacji nie używam, wolę XML. Yaml'a za bardzo nie lubię.

Ad wstrzykiwania kontenera. Po co?
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.