Wpis z mikrobloga

Mam projekt napisany w Symfony. Jest to jedna aplikacja, ale teraz mam takie wymaganie, że w zależności od hosta ma się zachowywać w inny sposób, tzn. jeżeli odpalona jest z xxx.com, to ma działać w jeden sposób, a jeżeli z yyy.com, to już ma działać w inny sposób, mimo że to nadal ta sama aplikacja. Jakieś pomysły?

#webdevhelp #webdev #symfony #symfony2 #php
  • 11
  • Odpowiedz
@TwigTechnology: No tak zazwyczaj robiłem. Mam jeden projekt, instaluję go w jednym katalogu, instaluję w drugim katalogu, daję różne parametry w parameters.yml i działa, ale… W moje ręce trafił projekt, który jest jako jedna całość, ale wewnątrz np. twigów są porobione takie warunki:

{% if 'xxx.com' in app.request.host %}

{% endif %}

No ale logika pozostaje wspólna. Nie mogę przecież robić walidacji, działania logiki na podstawie app.request.host, tzn. mogę, ale moim
  • Odpowiedz
@mariecziek: no to jest porażka. Jak kiedyś przyjdzie zmienić domenę to w ogóle... mogli chociaż jako parametr ją zrobić.
IMO może by zależnie od domeny albo ładować inny kernel, albo w kernelu - inne środowisko/parametry itd.
Kwestia jak daleko idą różnice pod obu domenami.
  • Odpowiedz
@zakopiak: Pytanie jest takie: mam z tego zrobić 2 projekty czy jest jakiś mechanizm Symfony (nie wiem, może na poziomie kernela), który mi ustawi cały projekt na wersję1 lub wersję2 w zależności od tego z jakiego hosta uruchamiam projekt.
Bundle już zostały zaorane, więc chyba nie da się zrobić tego jako Bundle1 i Bundle2 ze wspólną bazą danych i częściowo wspólną logiką.
  • Odpowiedz
@mariecziek: Ciężko uzależniać od hosta biorąc pod uwagę, że zwykle aplikacja to nie tylko front, ale również skrypty w tle, a tam nie masz zdefiniowanego hosta. Czyli rada nr jeden - nie bazujemy na url przy logice.

Pytanie jest takie: mam z tego zrobić 2 projekty


Generalnie widzę to tak:
Nie potrzebujesz dwóch osobnych projektów (w sensie kodu w dwóch miejscach), jeśli mają tę sama bazę kodu (to samo repozytorium itd).
  • Odpowiedz
@mariecziek: W kernelu na podstawie domeny i jakiegoś zasobu dodajesz parametr do kernela (nginx na podstawie hosta może Ci dać jakiś dodatkowy parametr - łatwiej będzie Ci w przyszłości zmienić domenę). Na podstawie tego parametru w services ładujesz konkretne templatki itp.
Dobry przykład do nauki DI i działania parametrów w serwisach.
  • Odpowiedz
@zakopiak: @slave89: Dzięki panowie, takiej odpowiedzi oczekiwałem.
Znalazłem coś takiego w internecie: https://ig.nore.me/presentations/2015/04/splitting-a-symfony-project-into-separate-tiers/ ale jest tutaj informacja o tym, że "However, it has already been decided that this will no longer be supported by default in Symfony3 so this method is unlikely to keep your application forward compatible."
A mam projekt na Symfony 3.4 (wczoraj zrobiłem aktualizację 3.2 do 3.4) i nie byłem pewien, że takie rozwiązanie zadziała, ale skoro
  • Odpowiedz