Play框架 - CRUD命名规范

5

CRUD模块在play框架中无法转换有意义的类名。例如,如果我有一个Category模型,然后在控制器文件夹中创建一个Categories类来扩展CRUD,那么Category链接将不会出现在管理部分。但是,如果我将文件重命名为“Categorys”,它就可以正常工作。是否有解决这个小问题的方法?因为我曾经使用过CakePhp,并且所有名称约定都非常好用。

1个回答

9
根据Play框架CRUD模块文档,控制器的类名必须与模型类名相同,末尾加上“s”。但是,您可以使用@CRUD.For()注释单独自定义CRUD控制器的命名。
package controllers;

import models.Category;

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

}

编辑:

快速浏览CRUD模块的源代码后,我认为模型命名解析大约在{play的位置}/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”。它也可以正常工作。)
因此,如果您真的想以“传统”的方式修复它,可以修改CRUD.java的第260行,并利用一些用于单数-复数转换的库,如 ModeShape中的Inflector。但在我看来,使用@CRUD.For注解就足够好并且更具成本效益。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接