0

我在 Grav 的管理面板中创建了一个配置表单,我想在保存时扩展/修改它的一些值。更准确地说,我在蓝图中有一个如下所示的列表表单元素:

topics:
  type: list
  fields:
    .name:
      type: text
    .unique_id:
      type: text
      readonly: true
      default: generate_on_save

保存时,我想generate_on_save用唯一的 id 替换所有值。我试图挂钩onAdminSave事件,但事件对象只包含\Grav\Common\Data\Blueprint的一个实例,没有实际的表单数据。然后我尝试修改请求对象,但是当我在 grav 容器中注册修改后的请求时,出现错误Cannot override frozen service 'request'

我怎样才能完成这项任务?

4

1 回答 1

1

我做了以下工作正常:

  • 在配置文件/user/themes/quark/blueprints.yaml中,我复制了您的字段定义。
  • 在管理中,我在主题 Quark 的配置页面上添加了一些主题。
  • 以下事件处理程序捕获了“保存”操作:
    public function onAdminSave(Event $event) {
      /** @var Data */
      $form = $event['object'];
      $topics = $form['topics'];
    
      foreach ($topics as &$topic) {
        if ($topic['unique_id'] === 'generate_on_save') {
          $topic['unique_id'] = str_rot13($topic['name']);
        }
      }
    
      // Note: Updated $form['topics'] must be re-assigned
      $form['topics'] = $topics;
    }
    
  • 具有“唯一”值的主题已正确写入/user/config/themes/quark.yaml
于 2021-12-12T20:59:58.807 回答