保存时修改管理配置值

Modify admin configuration values on save

我在 Grav 的管理面板中创建了一个配置表单,我想 extend/modify 保存其中的一些值。 更准确地说,我有一个列表表单元素,在蓝图中看起来像这样:

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

保存时,我想用唯一 ID 替换所有 generate_on_save 值。 我试图连接到 onAdminSave Event, but the Event Object contained just an instance of \Grav\Common\Data\Blueprint 但没有实际的表单数据。然后我尝试修改请求对象,但是当我在grav容器中注册修改后的请求时,我得到一个错误Cannot override frozen service 'request'

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

我做了以下工作正常:

  • 在配置文件 /user/themes/quark/blueprints.yaml 中,我复制了您的字段定义。
  • 在后台我在Quark主题的配置页面添加了一些主题。
  • 'Save' 操作被以下事件处理程序捕获:
    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