【问题标题】:Modify admin configuration values on save保存时修改管理员配置值
【发布时间】:2022-01-16 11:37:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php grav pimple


    【解决方案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

    【讨论】:

    • 我没有注意到该事件实际上确实包含实际的表单数据。请注意,如果您通过引用传递条目,foreach 在这种情况下有效 - foreach($topics as &$entry) { ... }
    • @Benni,您在使用参考方面是正确的。我已经更新了答案。
    猜你喜欢
    • 2016-09-01
    • 2016-11-18
    • 2023-03-18
    • 2013-10-16
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    相关资源
    最近更新 更多