2009-11-19 15 views
5

Staram się rozwijać aplikacji grails, który posiada „root” zawartość (www.mydomain.com/about na przykład), ale także wsparcie „projekty” w oparciu o subdomenie wniosku; na przykład myproject.mydomain.com> www.mydomain.com/myproject. W pierwszym przejeździe, mam konfigurację poniższy adres URL:Grails - projekty oparte poddomen i linki

"/$controller/$action?/$id?" { 
... 
} 

"/$project/$controller/$action?/$id?" { 
    constraints { 
    } 
} 

Główną wadą tej pory jest to, że zmienna $ projekt musi być podawany ręcznie do każdego ogniwa (żmudne i nie DRY):

<g:link controller="foo" action="bar" params="${[project: params.project]}">link</g:link> 

Czy istnieje sposób automatycznego wstawienia parametru $ project do wszystkich linków, jeśli jest obecny, lub czy istnieje lepszy sposób rozwiązania tego problemu?

+0

Aby to zrobić, będziesz musiał zastosować ograniczenia więc Grails wie, jakie sterowniki do mapowania/controller/action/id i które sterowniki do mapowania/projektu/kontroler/działania/ID. – Blacktiger

Odpowiedz

1

Zasadniczo można utworzyć Grails plugin że wstrzyknie do sterownika nowy project param o wartości oparta na niestandardowym TagLib <g:project bean="myproject"/> (na przykład)

zmusi cię do określenia tego TagLib na każdy strona gsp twojego projektu, ale wciąż jest DRYer niż każdy link.

Mamy nadzieję, że pomoże,

Fabien.

0

mogę myśleć o kilku rzeczach.

a) można umieścić serwer proxy (Apache lub coś innego) w przedniej części serwera aplikacji i zrobić kilka przepisywanie URL. Bonus: Umożliwiłoby to również buforowanie zasobów statycznych.

b) Rozwiązanie to jest trochę bardziej technicznie interesujące. Możesz wyszukać projekt w oparciu o nagłówek hosta http (część poddomeny). Pozwoli to zaoszczędzić na przepisywaniu wszystkich adresów URL, wszystkie konwencje Grails będą nadal obowiązywały, więc nie powinieneś mieć problemów z wtyczkami innych firm i tak dalej.

+0

Jest to zasadniczo sposób konfigurowania infrastruktury, ale nie dotyczy generowania linków, które stanowią sedno problemu. –

+0

Och, przepraszam. Nie przeczytałem wystarczająco dokładnie twojego pytania. – Kimble