CRUD模块无法在play框架中转换有意义的类名。例如,如果我有一个Category模型,然后在控制器文件夹中创建一个Categories类来扩展CRUD,则类别链接将不会出现在admin部分中。但是,如果我将文件重命名为“Categorys”,它将起作用。这个小问题有什么解决方案吗?因为我曾经和CakePhp一起玩,所以它的所有名称约定都很好用
答案 0 :(得分: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模块的源代码之后,我认为模型命名解析位于{location of play} /modules/crud/app/controllers/CRUD.java(版本1.2.4)的第260行:< / p>
259 String name = controllerClass.getSimpleName().replace("$", "");
260 name = "models." + name.substring(0, name.length() - 1);
它只是通过查找没有控制器名称的最后一个字符的单词来查找模型名称。 (我刚刚测试过,你甚至可以将你的CRUD控制器命名为'Categoryz'。它工作得很好)
所以,如果你真的想以'常规'的方式解决这个问题,你可以修改CRUD.java的第260行,并利用一些库进行单数复数转换,如Inflector in ModeShape。但在我看来,使用@ CRUD.For注释很好,更具成本效益。