2015-02-05 15 views
5

Birden fazla alt etki alanını ve/veya kök etki alanını tek bir Play Framework 2.3 (Scala) uygulamasına (örneğin, apple.com, bananas.com veya buy.bananas.com) işaret etmek istiyorum.Play Framework 2.3'teki alan rotaları

Talebin hangi alana geldiğine bağlı olarak, farklı yollara sahip olmak istiyorum.

GET apples.com  @controllers.ApplesController.home 
GET bananas.com  @controllers.BananasController.home 
GET buy.bananas.com @controllers.BananasController.buy 

Çal Framework 2.3 bunu yapmanın bir yolu var mı:

İdeal olarak, böyle bir şey çalışması gerekir?

+5

Bu gibi şeyler http-sunucuları tarafından daha iyi ele alınır ... Çerçevelere göre değil. Yine de, böyle bir işlevin bazılarını başarabilirsiniz. Daha fazla bilgi için -> http://typesafe.com/activator/template/play-multidomain-seed ve https://github.com/adrianhurt/play-multidomain-seed/blob/master/app/Global.scala –

+1

@SarveshKumarSingh Yorumun yerine bir cevap yaz, onu kabul et/kabul et iyi bir nokta – biesior

+0

@biesior Çözümün kapsamı bir cevaba uymayacak. Anlaşılması gereken çok şey var ve tüm projenin belirli bir şekilde yaratılması gerekiyor. –

cevap

5

Ben java bunu yapmanın yolu CheckUrl.java

belki

yolları

GET /   @controllers.ApplesController.index 
GET /apples  @controllers.ApplesController.home 
GET /bananas  @controllers.BananasController.home 
GET /buybananas @controllers.BananasController.buy 

kontrolör

@With(CheckUrl.class) 
public static Result index() { 
     return ok(index.render("Unable to resolve host.")); 
    } 

yardımcı olabilecek java .Here içinde olduğu çalışma

public class CheckUrl extends play.mvc.Action.Simple { 

    public F.Promise<SimpleResult> call(Http.Context ctx) throws Throwable { 

     String host = request().host(); 
     System.out.println("HOST IS "+host); 

       if (host.equalsIgnoreCase("apples.com")) { 

      return F.Promise.pure(redirect("/apples")); 

     }else if (host.equalsIgnoreCase("bananas.com ")){ 

     return F.Promise.pure(redirect("/bananas")); 

     }else if (host.equalsIgnoreCase("buy.bananas.com")){ 

     return F.Promise.pure(redirect("/buybananas")); 
     }else{ 
      return delegate.call(ctx); 
     } 



} 

I Bunu yapmanın iyi bir yolu olup olmadığını bilmiyorum. request().uri() ile denedim ama request().host() ile çalıştım ve bu benim için çalıştı.Monus bu yardımcı olabilir.

+1

Bu benim sorunumun bir çözümü, teşekkürler. Lütfen benim soruma yorum olarak gönderilen diğer adamın github bağlantısını da kontrol ettiğinizden emin olun. Benim düşüncemde bunu yapmak daha güzel ve daha temiz bir yol, bu yüzden size de yardımcı olabilir. –