2012-04-04 16 views
13

Próbuję dowiedzieć się, jak wykonać przekierowanie w działaniu kontrolera w Play (2.0) za pomocą Scala.Play Framework - Przekierowanie z parametrami

Przekierowanie za pomocą

Redirect(routes.Application.index) 

działa dobrze.

To, czego nie mogę zrozumieć z dokumentów, API lub Google, to jak dodać parametry do połączenia.

idę z Grails, gdzie można to zrobić łatwo, jak następuje:

działania przekierowanie: "Index", params [ "klucz": "wartość"] .

Jedyny sposób, jaki znalazłem, to wywołanie przekierowania za pomocą adresu URL łańcucha i łańcucha zapytania, co wydaje się niezręczne.

W zasadzie chciałbym użyć przekierowania (połączenia) w jakiś sposób, ale nie wiem jak utworzyć obiekt wywołania za pomocą odwrotnego routingu.

Czy brakuje mi czegoś/nie rozumiem pojęcia w Play/Scala?

Z góry dziękuję!

Odpowiedz

15

Ellou”

Trasa jest tylko funkcja, dzięki czemu można przekazywać argumenty jak zwykle:

// Redirect to /hello/Bob 
def helloBob = Action { 
    Redirect(routes.Application.hello("Bob"))  
} 

Ten fragment pochodzi z http://www.playframework.org/documentation/2.0/ScalaRouting (na dole)

+0

Dzięki! Właściwie to próbowałem tego, ale kompilator narzekał, że wprowadziłem zbyt wiele argumentów. Problem polegał na tym, że akcja zajmuje długi, ale zdefiniowany przeze mnie Routing powinien zawierać domyślną wartość akcji. Musiałem to usunąć. Teraz muszę wywołać indeks (None) lub index (Some (foo)). Pochodzenie z Grails wydaje się naprawdę nudne. – pchronz

+3

+1 Oto, jakie są bezpieczne adresy URL. Chciałbym, żeby gra sprzedawała im więcej za to, czym są. –

+1

+1 również w przypadku bezpiecznych typów, @DanBurton, thanx do edycji – biesior

0

Można również uniknąć tworzenie innej funkcji właśnie w tym celu w kontrolerze. W konfiguracji trasy możesz po prostu dodać coś takiego:

GET /google @controllers.Default.redirect(to = "http://google.com") 
+0

@zenith: nadzieję, że pomaga –

+0

Muuuuch lepiej! – emlai

+0

To nie działa. Otrzymuję "Brak takiego pliku lub katalogu" –