Подтвердить что ты не робот

Как передавать сообщения при вводе MessageApi и использовать 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)

Мой контроллер выглядит так:

import 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))
      }

    }

Страница просмотра выглядит так:

@(form: Form[controllers.WebsiteForm])(implicit context: MyContext, m: Messages) {


}

Я получаю сообщение об ошибке:

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]                                

Я попытался передать в messageApi, как:

 Ok(views.html.websites.edit(model)(request.context, messageApi))

Но затем я получил ошибку несоответствия типа между Сообщениями и MessageApi.

Что мне делать?

P.S Я даже не использую сообщения в своих представлениях, но я использую помощники формы, которые, как я предполагаю, используют сообщения под обложками...

4b9b3361

Ответ 1

Похоже, вы пытаетесь передать один неявный параметр явно, а другой - неявно. Вы должны либо передать их оба явно:

Ok(views.html.websites.edit(model)(request.context, implicitly[Messages]))

Или оба неявно:

implicit val context = request.context
Ok(views.html.websites.edit(model))