Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2][SF][Symfony2]Odesparowanie logiki od frameworka
Forum PHP.pl > Forum > PHP > Frameworki
Boshi
Dużo się mówi o odseparowaniu logiki od danego frameworka, tak aby po przeniesieniu do innego wszystko odpaliło bez przepisania wszystkiego.
Może ktoś mi wytłumaczyć na przykładzie, chociażby symfony jak to wykonać? Skoro mamy pisać własny kod niezależny od frameworka to rozumiem, że nie powinno się rozszerzać bazowej klasy kontrolera, co za tym idzie tracimy bezpośrednio metody np do zwracania responsa. Jak takie coś rozwiązać? Inny przykład. W kontrolerze pobieramy dane z bazy(doctrine) po przed dostępne metody, nie mając metod z bazowego kontrola na czym się opierać?

fajnie jak by ktoś rzucił konkretnym przykładek jakiejś aplikacji.

https://zawarstwaabstrakcji.pl/20170130-cqr...rowadzenie-php/

czytałem, ale średnio z tego rozumiem całość i no nie odnosi się to bezpośrednio do pytania.
lukaskolista
Przykład z kontrolerem:
Cytat
Skoro mamy pisać własny kod niezależny od frameworka to rozumiem, że nie powinno się rozszerzać bazowej klasy kontrolera, co za tym idzie tracimy bezpośrednio metody np do zwracania response. Jak takie coś rozwiązać?

w symfony istnieje możliwość korzystania z kontrolerów jak z usług i wtedy też tracisz te metody. Response możesz sobie sam utworzyć, metody z bazowego kontrolera jedynie ułatwiają niektóre rzeczy, ale nie są niezastąpione. Podejść do problemu jest conajmniej kilka. Bardzo prosty przykład odseparowania aplikacji od frameworka:
  1. // Twoj kontroler w aplikacji
  2. class UserController
  3. {
  4. public function create($userId, array $data)
  5. {
  6. $user = $this->userRepository->find($userId);
  7. $user->edit($data);
  8.  
  9. return new RedirectResponse(302, '/user/profile/'.$userId);
  10. }
  11. }
  12.  
  13. // Kontroler w symfony
  14. class UserController extends SymfonyController
  15. {
  16. public function createAction($id)
  17. {
  18. $data = $this->request->getPost();
  19.  
  20. $applicationResponse = $this->get('app.user_controller')->create($id, $data);
  21.  
  22. return new SymfonyResponse($applicationResponse->getCode(), [
  23. 'location' => $applicationResponse->getLocation()
  24. ]);
  25. }
  26. }


Zaznaczam, że powyższy przykład jest bardzo prosty.
Do powyższego należy dodać, że aplikacja powinna być w osobnej przestrzeni nazw i najlepiej w innym katalogu tak, aby można było w każdej chwili ją "wyjąć" z projektu. W przypadku symfony może to być katalog src:
src/
src/App/ - tutaj aplikacja
src/Bundle/ - tutaj symfonowe bundle
Nie ma konkretnego, jedynego i słusznego rozwiązania tego problemu.
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-2024 Invision Power Services, Inc.