2011-07-14 41 views

Trả lời

37

Vâng, đây không phải tài liệu, vì vậy tôi không chắc chắn nếu điều này là cố ý có thể hay không, nhưng tôi đã tìm thấy một cách để thực hiện công việc này. Tuy nhiên, xin lưu ý vì đây là một tính năng không có giấy tờ, có thể có nghĩa là nó không được mong đợi và do đó có thể bị phá vỡ trong các phiên bản phát sau này.

Bạn có thể đạt được những gì bạn muốn bằng cách sử dụng dòng sau trong tệp tuyến đường của bạn.

%{ if (play.mode.isDev()) }% 

Tôi tạo ra một ứng dụng thử nghiệm với một vài hành động

public class Application extends Controller { 

    public static void index() { 
     render(); 
    } 

    public static void noDev() { 
     renderText("NoDev"); 
    } 
    public static void noProd() { 
     renderText("NoProd"); 
    } 
} 

sau đó tôi thêm vào phần sau đây để các tuyến đường của tôi tập

# Home page 
GET /          Application.index 

# Ignore favicon requests 
GET  /favicon.ico       404 
# Map static resources from the /app/public folder to the /public path 
GET  /public/        staticDir:public 

%{ if (play.mode.isDev()) }% 
GET  /route1         Application.noDev 
GET  /route2         Application.noDev 
GET  /route3         Application.noDev 
*  /{controller}/{action}     {controller}.{action} 

%{ if (play.mode.isProd()) }% 
GET  /route4         Application.noProd 
GET  /route5         Application.noProd 
GET  /route6         Application.noProd 
*  /{controller}/{action}     {controller}.{action} 

Vì vậy, bạn có thể thấy rằng việc sử dụng một đơn giản nếu tuyên bố, nó sẽ thực hiện các nhóm tuyến đường tiếp theo chỉ trong chế độ đó. Câu lệnh if sẽ kết thúc khi câu lệnh if tiếp theo được tìm thấy.

Nếu ở chế độ Dev bạn cố gắng truy cập route4, bạn sẽ không thể truy cập nó, và bạn sẽ thấy trang RouteNotFound cho thấy các tuyến có sẵn là các tuyến mà bạn đã xác định chỉ dành cho nhà phát triển.

+0

Đó là siêu ngọt. Tôi không có ý tưởng bạn có thể làm logic trong tập tin tuyến đường. –

+0

Tôi biết bạn có thể làm một số logic, vì nó là một giải pháp cho vấn đề bối cảnh chiến tranh, nhưng không chắc chắn bao nhiêu logic là có thể. Vì vậy, tôi đã thử nó, và nó đã làm việc! – Codemwnci

+0

Xuất sắc ... +1 – sojin

2

Đối play framework phiên bản 2.x:

  • Bạn cần có một file routes cho phép nói prod.routes trong thư mục gốc của ứng dụng của bạn (giống directoy của gốc routes tập tin), tập tin này chứa chỉ các tuyến đường bạn muốn sản xuất.
  • Sau đó, bạn tạo một tệp khác .conf như prod.conf bên trong thư mục conf.
  • Bây giờ tập tin conf mới này phải chứa sau:

cho play framework 2.4 và mới hơn:

include "application.conf" 

play.http.router=prod.Routes 

Hoặc không mới .conf tập tin thông qua tham số:

-Dplay.http.router=prod.Routes

Và nếu lớn hơn 2.4 thì:

include "application.conf" 

application.router=prod.Routes 

Và khi bạn chạy sản xuất chạy nó với -Dconfig.file=prod.conf

Các vấn đề liên quan