gpt4 book ai didi

playframework - Play 中 CRUD 表单和 Controller 的高级定制

转载 作者:行者123 更新时间:2023-12-04 14:04:45 24 4
gpt4 key购买 nike

我正在寻找的是能够快速(DRY!)为给定模型生成表单,但与使用 CRUD 表单/模型相比,控制方式更少;例如,通过能够在没有完整的 crud Controller /路由的情况下使用 crud 标签,或者通过强烈定制它们。

让我通过一个例子来解释。

我有一个模型 A,而不是链接(ManyToOne)到 2 个模型,B 和 C

class public A extends Model {
public String name;
@ManyToOne
public A a;
@ManyToOne
public B b;
}

我希望能够编写以下路线:
/A/{id}/B/               somecontroller
/A/{id}/C/ some(other?)controller

甚至更好:
/A/{id}/{submodel}/      somecontroller

并在相应的 html View 中能够执行以下操作:
<div>object.name</div>

#{form action:@save(object.b._key()), enctype:'multipart/form-data'}
#{crud.form object.b /}
<p class="crudButtons">
<input type="submit" name="_save" value="&{'crud.save', type.modelName}" />
<input type="submit" name="_saveAndContinue" value="&{'crud.saveAndContinue', type.modelName}" />
</p>
#{/form}

其中'object'不是“b”或“c”实例,而是“a”,我可以告诉 #{crud.form /}它应该映射哪个模型(在这种情况下,'b')

有没有办法实现类似的东西?

这个问题可以解决:
  • 有没有简单的#{form MODEL} #{/form}标签?!

  • 或者,通过能够以某种方式自定义更多的 CRUD,例如。
  • 有没有办法修改主要的 crud 模块并只覆盖所需的方法(而不是全部复制!)?

  • 恐怕我无法通过简单地覆盖模型 CRUD Controller 来实现这个目标,也许我错了,但除了阅读 CRUD 代码(我正在做的)之外,官方文档对哪些方法可以被覆盖有点限制如何...

    相关: how to create an html form for a model in playframework

    我也刚找到 this google mail thread这似乎朝着定制粗略的方向发展。我希望为这种典型的需求提供更开箱即用的解决方案......

    最佳答案

    我在这个 play! google group thread 中找到了我一直在寻找的答案..一切都已经存在,尽管没有记录!

    它就像使用一样简单:

    显示Model类的创建表单。

    #{crud.form class:'models.ModelName' /} 

    显示任何现有实例的版本形式
    #{curd.form object:anyInstance /} 

    然后你可以随心所欲,但这是我编辑现有对象的模式:

    在您的模板中
    #{form @Controller.Action, method="POST" ... }

    <input type="hidden" name="object.id" value="${myobject.ID}" />
    #{crud.form object:gun.gunEngraving}
    #{/crud.form}
    <p>
    <input type="submit" value="Save Changes" />
    </p>
    #{/form}

    隐藏的输入设置特殊的“id”字段,以便:

    在你的 Controller.Action
    function static void Action(routeParams, MyModel object) {
    some validation;
    object.save();
    render or renderTemplate or other action for redirect;
    }

    这当然是一个简化的代码,但是当我快速需要将表单嵌入到 View 中并且不能/不想使用整个 CRUD 系统时,我真的很喜欢这种模式!

    [编辑] 更高级的自定义 CRUD 优点

    crud 标签实际上不需要 crud 模块。
    以至于我最终将它们全部复制到我的项目中,修改它们以添加其他很酷的功能,例如能够从默认的“对象”更改表单中对象的名称(我决定覆盖原件,但是您可以使用与 tags/crud 不同的文件夹来创建自己的命名空间)

    关于playframework - Play 中 CRUD 表单和 Controller 的高级定制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8685384/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com