这个 edit controller

它可以在 (cubicweb.web.views.editcontroller )。此控制器处理从HTML表单接收的数据以创建或更新实体。

版本处理

与要编辑的实体相关的参数指定如下(首先在 属性部分 ):

<rtype-role>:<entity eid>

其中,实体ID可以是要创建的实体的字母。我们将这些参数命名为 有资格的 .

  • 使用表单参数检索要编辑的实体 eid and _ _type

  • 对于要编辑的实体的所有属性和关系(属性和关系的处理方式稍有不同,但这些细节在这里不太相关):

    • 使用 rtyperole__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主题或对象可以通过 _ .将删除每个指定的关系。

  • 如果没有编辑实体,但表单包含参数 __linktoeid ,此值通过使用指定的值来解释。 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.