mie azioni di controllo utilizzare un'azione personalizzata che assomiglia:Come passare i messaggi quando faccio l'iniezione MessageApi e utilizzare l'I18nSupport Trait
class ActionWithContext @Inject()(....)
extends ActionBuilder[ContextAwareRequest] {
def invokeBlock[A](request: Request[A], block: (ContextAwareRequest[A]) => Future[Result]) = {
...
}
}
class ContextAwareRequest[A](val context: MyContext, request: Request[A]) extends WrappedRequest[A](request)
mio regolatore assomiglia:
sguardi paginaimport play.api.i18n.{MessagesApi, I18nSupport, Messages}
import play.api.i18n.Messages.Implicits._
class WebsiteController @Inject() (val messagesApi: MessagesApi, actionWithContext: ActionWithContext, ..)
extends BaseController with I18nSupport {
def edit(websiteId: Int) = actionWithContext { request =>
val model = ..
Ok(views.html.backend.websites.edit(model)(request.context))
}
}
La vista come:
@(form: Form[controllers.WebsiteForm])(implicit context: MyContext, m: Messages) {
}
sto ottenendo l'errore:
not enough arguments for method apply: (implicit context: com.example.services.components.MyContext, implicit m: play.api.i18n.Messages)play.twirl.api.HtmlFormat.Appendable in class edit.
[error] Unspecified value parameter m.
[error] Ok(views.html.websites.edit(model)(request.context))
[error]
ho provato passando nei messageApi come:
Ok(views.html.websites.edit(model)(request.context, messageApi))
Ma poi un errore di mancata corrispondenza di tipo tra i messaggi e MessageApi.
Cosa dovrei fare?
PS Non sto anche utilizzando messaggi in mio punto di vista, ma io sto usando gli aiutanti Form che presumo che i messaggi di uso sotto le coperte ...
sarebbe possibile aggiungere il 'implicita val contesto = request.context in myActionWithContext in qualche modo? Perché ogni azione avrà questo codice e se posso evitare di aggiungerlo a tutte le mie azioni sarebbe fantastico. – Blankman
Dovresti essere in grado di scrivere un tratto che contiene qualcosa come "implicit def request2Context (richiesta implicita: ContextAwareRequest): MyContext = request.context', quindi mixare quel tratto in modo simile a come stai mixando in' I18nSupport'. Vedi questo per l'ispirazione: https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/i18n/I18nSupport.scala#L26 – danielnixon
o aggiungi semplicemente che ' def' al tuo 'BaseController'. – danielnixon