这个 edit controller¶
它可以在 (cubicweb.web.views.editcontroller
)。此控制器处理从HTML表单接收的数据以创建或更新实体。
版本处理¶
与要编辑的实体相关的参数指定如下(首先在 属性部分 ):
<rtype-role>:<entity eid>
其中,实体ID可以是要创建的实体的字母。我们将这些参数命名为 有资格的 .
使用表单参数检索要编辑的实体 eid and _ _type
对于要编辑的实体的所有属性和关系(属性和关系的处理方式稍有不同,但这些细节在这里不太相关):
使用
rtype
,role
和__type
信息,获取适当的字段实例检查字段是否已修改(如果未修改,则转到下一个关系)
构建RQL表达式以更新实体
最后,执行所有RQL表达式。
对于要编辑的每个实体:
如果一个限定参数 __linkto 如果已指定,则其值必须是字符串(或字符串列表),如:::
<relation type>:<eids>:<target>
其中<target>是 subject or object and each eid could be separated from the others by a `_ `我是说。目标指定 编辑的实体 是关系的主题或对象,并且将插入指定的每个关系。
如果一个限定参数 __clone_eid 为实体指定时,将复制作为此参数值传递的指定实体的关系。
如果一个限定参数 __delete 如果指定,则其值必须是字符串或字符串列表,如下所示:::
<subjects eids>:<relation type>:<objects eids>
其中每个EID主题或对象可以通过 _ .将删除每个指定的关系。
如果没有编辑实体,但表单包含参数 __linkto 和 eid ,此值通过使用指定的值来解释。 eid 指定要在其上添加关系的实体。
注解
如果参数 __action_delete 如果找到,将删除指定为要编辑的所有实体。
如果参数 __action_cancel 找到,未完成任何操作。
如果参数 __action_apply 如果找到,则正常应用编辑,但在窗体上完成重定向(请参见 重定向控制 )
如果找不到要编辑的实体并且没有参数 __action_delete, _ _action_cancel, __linkto, _ _删除`或 `__insert ,引发错误。
使用参数 __message 在表单中,将允许使用其值作为消息,以便在编辑完成后向用户提供。
重定向控制¶
编辑完成后,仍然存在一个问题:我们现在应该去哪里?如果没有指定任何内容,控制器将完成他的工作,但这并不意味着我们会满意结果。我们可以通过以下参数来控制:
__redirectpath :URL的路径(相对于网站的根URL,没有表单参数
__redirectparams :要添加到路径的表单参数
__redirectrql :重定向请求
__redirectvid :重定向视图标识符
__errorurl :初始表单URL,用于在编辑过程中出现验证错误时重定向。如果未指定此页,则显示错误页,而不是返回表单(必要时,由表单负责显示错误)
__form_id :初始视图表单标识符,用于 __action_apply 找到了
一般来说,我们使用 __redirectpath and _ _重定向参数`OR `__redirectrql and _ _redirectvid.