2012-02-02 43 views
5

Mô-đun CRUD không thể chuyển đổi tên lớp có ý nghĩa trong khung chơi. Ví dụ, nếu tôi có một mô hình thể loại và sau đó làm cho một lớp hạng mục trong cặp điều khiển để mở rộng CRUD, liên kết thể loại sẽ không xuất hiện trong phần quản trị. Tuy nhiên, nếu tôi đổi tên tệp thành "Danh mục", nó sẽ hoạt động. Có giải pháp nào cho vấn đề nhỏ này không? Bởi vì tôi đã từng chơi với CakePHP và nó hoạt động khá tốt với tất cả các công ước tênKhung chơi - Quy ước đặt tên CRUD

Trả lời

9

Theo documentation of CRUD module of Play framework

tên lớp của bộ điều khiển phải là tên mô hình lớp học với một trận chung kết ‘s’.

Tuy nhiên, bạn có thể sử dụng @ CRUD.For() chú thích để tùy chỉnh cách đặt tên của bộ điều khiển CRUD riêng lẻ:

package controllers; 

import models.Category; 

@CRUD.For(Category.class) 
public class Categories extends CRUD { 

} 

EDIT:

Sau một lướt nhanh qua mã nguồn của module CRUD, Tôi nghĩ độ phân giải đặt tên mô hình là khoảng 260 dòng trong {location of play} /modules/crud/app/controllers/CRUD.java (đối với phiên bản 1.2.4):

259    String name = controllerClass.getSimpleName().replace("$", ""); 
260    name = "models." + name.substring(0, name.length() - 1); 

Nó chỉ đơn giản là tìm tên mô hình bằng cách tìm kiếm từ mà không có ký tự cuối cùng của tên bộ điều khiển. (Tôi vừa thử nghiệm nó, bạn thậm chí có thể đặt tên bộ điều khiển CRUD của bạn là 'Categoryz'. Và nó hoạt động tốt)

Vì vậy, nếu bạn thực sự muốn sửa lỗi này theo cách thông thường, bạn có thể sửa đổi dòng 260 CRUD.java và sử dụng một số thư viện để chuyển đổi số ít như số Inflector in ModeShape. Nhưng theo ý kiến ​​của tôi, việc sử dụng chú thích @ CRUD.For chỉ tốt và tiết kiệm chi phí hơn.