Więc zagraj 2.0 miałem to:Trasy z opcjonalnym parametrem - Play 2.1 Scala
GET /tasks/add controllers.Tasks.addTask(parentId: Option[Long] = None)
GET /tasks/:parentId/add controllers.Tasks.addTask(parentId: Option[Long])
Dzięki metodzie kontrolera tak:
def addTask(parentId: Option[Long]) = Action {
Ok(views.html.addTask(taskForm, parentId))
}
I to działa. Po migracji do wersji 2.1 wydaje się, że narzeka na te linie: No URL path binder found for type Option[Long]. Try to implement an implicit PathBindable for this type.
Zasadniczo próbuję osiągnąć połączenie tasks/add
i trasy tasks/123/add
z tą samą metodą, która akceptuje numer Optional[Long]
. Masz pomysł, jak to zrobić? Dzięki.
Ok, więc dostałem coś w rodzaju tego, że to nie jest błąd, to odpowiedź na temat funkcji w Lighthouse: "Usunęliśmy obsługę opcji [Long] w bindables ścieżki, ponieważ nie ma sensu mieć opcjonalnego parametru ścieżki. Potrafię zaimplementować twoją własną ścieżkę, która będzie ją wspierała, jeśli zechcesz. " Do tej pory mam 2 rozwiązania, przekazując -1 jako parentId, którego tak naprawdę nie lubię. Lub posiadające 2 różne metody, co prawdopodobnie ma więcej sensu w tym przypadku. Implementacja PathBindable nie wydaje się teraz zbyt wykonalna, więc zapewne pozostanę przy dwóch metodach.
Dzięki, zgłosiłem to. Czy masz pojęcie, jak uzyskać pożądane zachowanie, bez czekania na poprawkę? – Laky
Ok, więc: "Usunęliśmy wsparcie opcji [Long] w powiązaniach ścieżek, ponieważ nie ma sensu mieć opcjonalnego parametru ścieżki. Możesz zaimplementować własną ścieżkę, która będzie ją obsługiwać, jeśli będzie taka potrzeba." Ale przekazanie Opcji zamiast jakiejś arbitralnej wartości wydaje mi się dużo przyjemniejsze. Czy to nie dlatego mamy pierwsze opcje? Być może wolę stworzyć dwie różne metody w tym przypadku, ponieważ byłoby to bardziej sensowne niż przekazywanie -1 jako id. – Laky
Tak, masz rację, to znacznie lepiej. Nie rozumiem jednak ich decyzji, dlaczego usunąć coś, co pozwalało na ładniejsze adresy URL? –