2012-02-02 66 views
5

CRUD模块无法在播放框架中转换有意义的类名称。例如,如果我有一个类别模型,然后在控制器文件夹中创建一个类别类以扩展CRUD,则类别链接将不会出现在管理部分中。但是,如果我将文件重命名为“Categorys”,它将起作用。有没有解决这个小问题的方法?因为我用CakePHP的发挥,它适用于所有的命名约定Play Framework - CRUD命名约定

回答

9

不错根据documentation of CRUD module of Play framework

控制器的类名必须是模型类的名称与最后的“S”。

但是,你可以使用@ CRUD.For()注释单独定制的CRUD控制器的命名:

package controllers; 

import models.Category; 

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

} 

编辑:通过CRUD模块的源代码

快速略读之后,我认为模型命名分辨率在{位置播放} /modules/crud/app/controllers/CRUD.java(适用于版本1.2.4)在260行左右:

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

只需查找没有控制器名称的最后一个字符的单词即可找到型号名称。 (我刚刚测试过,你甚至可以将你的CRUD控制器命名为'Categoryz',它的工作原理很好)

所以,如果你真的想以'传统'方式解决这个问题,你可以修改260行CRUD.java并利用一些库进行单数复数转换,如Inflector in ModeShape。但在我看来,使用@CRUD.For注释是很好,更具成本效益。