2016-12-15 5 views
0

У меня есть форму запроса на двух страницах моего сайта: О нас и Контакты. Действия для обоих из них описаны в моем домашнем контроллере. После отправки формы я вызываю метод sendRequest, который проверяет ошибки формы и отправляет запрос. Этот метод выглядит следующим образом:Generic Action в контроллере Play Framework

def sendRequest = Action {implicit request => 
    requestForm.bindFromRequest.fold(
    formWithErrors => { 
     BadRequest(views.html.Home.contacts(formWithErrors)) 
    }, 
    response => { 
    Redirect(routes.HomeController.contacts().flashing("success" -> "OK")) 
    } 
) 

}

В этом методе я определить вид и маршрут для навигации. И для моей страницы «О нас» я должен выполнить ту же работу, но позвоните нам и просмотрите маршрут.

Как создать общий метод и вызвать его с конкретным видом и маршрутом в качестве параметров?

ответ

0
// if requestForm is a Form[A] 

protected def genericMethod(
    view: Form[A] => play.twirl.api.Html, route: play.api.mvc.Call) = 
    Action {implicit request => 
    requestForm.bindFromRequest.fold(
    formWithErrors => { 
     BadRequest(view(formWithErrors)) 
    }, 
    response => { 
    Redirect(route.flashing("success" -> "OK")) 
    } 
) 
} 

def sendRequest = genericMethod(
    views.html.Home.contacts, 
    routes.HomeController.contacts()) 
+0

В этом случае мне по-прежнему нужны два метода для каждого запроса на отправку. Я имел в виду общий метод, который я мог бы назвать из обоих моих взглядов. – Tannheuser

+0

Я немного не понимаю, что вы имеете в виду. Если вы говорите, что не хотите включать «genericMethod» в оба контроллера, вы можете добавить общий метод к сопутствующему объекту или признаку, а затем включить его в оба контроллера. – Jamie

+0

Я не хочу иметь несколько методов sendRequest в моих контроллерах, которые будут устанавливать вид и маршрут. Могу ли я отправлять параметры для этого общего метода непосредственно из своих представлений? – Tannheuser