2015-12-14 3 views
12

मेरे नियंत्रक क्रियाएँ एक कस्टम क्रिया है कि लगता है कि का उपयोग करें:जब मैं MessageApi इंजेक्षन कैसे संदेश गुजरती हैं और उपयोग करने के लिए I18nSupport विशेषता

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

    } 

दृश्य पेज दिखता है:

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) 

मेरे नियंत्रक की तरह दिखता है जैसे:

@(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 के बीच एक प्रकार मेल नहीं खाता त्रुटि मिली।

मुझे क्या करना चाहिए?

पी एस मैं अपने विचारों में संदेशों का उपयोग नहीं कर रहा हूँ, लेकिन मैं फार्म सहायकों जो मैं कवर के अंतर्गत उपयोग के संदेशों अनुमान उपयोग कर रहा हूँ ...

उत्तर

9

ऐसा लगता है कि आप एक अंतर्निहित पैरामीटर स्पष्ट रूप से पारित करने के लिए कोशिश कर रहे हैं और दूसरा निहित रूप से। आप या तो उन दोनों को स्पष्ट रूप से पारित करने के लिए है:

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

या परोक्ष दोनों:

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

यह संभव है किसी भी तरह myActionWithContext में 'निहित वैल संदर्भ = request.context जोड़ने के लिए? क्योंकि प्रत्येक कार्रवाई में यह कोड होगा और यदि मैं इसे अपने सभी कार्यों में जोड़ने से बच सकता हूं जो बहुत अच्छा होगा। – Blankman

+1

आपको एक विशेषता लिखने में सक्षम होना चाहिए जिसमें 'implicit def request2Context (निहित अनुरोध: ContextAwareRequest): MyContext = request.context' जैसे कुछ शामिल हैं, फिर उस विशेषता में मिश्रण करें कि आप' I18nSupport' में कैसे मिश्रण कर रहे हैं। इसे प्रेरणा के लिए देखें: https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/i18n/I18nSupport.scala#L26 – danielnixon

+2

या बस उस ' def' को अपने 'बेसकंट्रोलर' पर। – danielnixon

संबंधित मुद्दे