【问题标题】:CRUD module and nested model and/or controllerCRUD 模块和嵌套模型和/或控制器
【发布时间】:2012-02-15 01:50:59
【问题描述】:

是否可以将实体放在嵌套文件夹/包中并仍然使用 CRUD 模块进行基本管理?

我正在使用 YABE 应用,playframework 1.2.4。

我创建了另一个名为“Page”的实体,并尝试将其放在所有文件夹中名为“cms”的子文件夹中,如下所示:

models
-- cms
   -- Page.java
etc.

YABE 实体的现有链接是这样创建的:

<a href="@{Users.list()}">Users</a>

生成路由 admin/users 并引导您到 CRUD 生成的页面

但是如果你放这样的东西,例如还在嵌套文件夹中创建控制器:

<a href="@{cms.Pages.list()}">Pages</a>

生成类似 cms.pages/list 的链接并引导您到“未找到

即使我将控制器放在控制器根文件夹中也不起作用,显然是因为 CRUD 模块找不到模型类,因为它在子文件夹中。

当与页面相关的类位于控制器和模型的根目录中时,一切正常,但我在这里想要“包”之类的东西。

我做错了什么?

这样的事情可能吗?

如果我将所有内容移到单独的模块中,它会起作用吗?

【问题讨论】:

    标签: module routes playframework crud


    【解决方案1】:

    这是可能的。但是,我发现将实体的 CRUD 模型保存在不同的包中会使事情变得更加复杂,并且没有增加太多价值。

    无论如何,请确保您的控制器使用 @CRUD.for 注释,以便他们知道要管理哪个实体:

    @CRUD.For(User.class)
    public class Users extends CRUD {
    }
    

    如果您需要将视图放在子包中,播放 crud:ov --template cms/Users/list 将无法按预期工作,除非您使用以下内容破解 crud commands.py:

    p = a.split('/')[0]
    c = a.split('/')[1]
    t = a.split('/')[2]
    app.override('app/views/CRUD/%s.html' % t, 'app/views/%s/%s/%s.html' % (p, c, t))
    

    我记不清了,但我认为您可能需要重新定义路由规则,例如:

    GET       /cms/?          cms.Users.index
    GET       /cms/users      cms.Users.list
    GET       /cms/users/new  cms.Users.blank
    GET       /cms/users/{id} cms.Users.show
    

    【讨论】:

    • 模块的情况一样吗?我不喜欢 Play! 中模块的工作方式,所以我尝试在单个应用程序中制作“包”。
    • 这是特定于 crud 模块的。除了控制器/视图/模型,如果您愿意,您可以按照您认为合适的方式打包您的类。模块非常适合为您的应用程序添加功能,但如果您需要更多控制权,您可以随时编辑模块代码并将其包含在您的应用程序中。
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2012-08-31
    相关资源
    最近更新 更多