ContentEntityForm buildForm 方法父级内存不足

ContentEntityForm buildForm method parent out of memory

我的表单 class 存在以下问题,它扩展了 ContentEntityForm class。

当调用父 buildForm 时,我的系统内存不足。

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildForm($form, $form_state);
    // Here is already runs of memory. $form is never initiated.

    /* @var $entity \Drupal\sg_configuration_rule\Entity\ConfigurationRule */
    $entity = $this->entity;

    $form_state->set('old_cron_value', $entity->get('cron_settings')->first()->value);

    $type = FALSE;

    if (!$entity->isNew()) {
      $type = $entity->getPluginInstance()->getPluginId();
    }

    if ($entity->isNew()) {
      $type = \Drupal::request()->query->get('type');
      if (!$type) {
        return new RedirectResponse(Url::fromRoute('configuration_rule.add_form_step1')->toString());
      }
    }

    if ($type) {
      try {
        /** @var \Drupal\sg_base_api\Plugin\BaseApiPluginInterface $enabled_api */
        $enabled_api = $this->baseApiPluginManager->createInstance($type);
      }
      catch (PluginException $exception) {
        LoggerService::error($exception->getMessage());
        return new RedirectResponse(Url::fromRoute('configuration_rule.add_form_step1')->toString());
      }

      $enabled_api->configRuleForm($form, $entity);

      $form['plugin_type']['widget'][0]['value']['#value'] = $type;
      $form['plugin_type']['widget'][0]['value']['#access'] = FALSE;
      $form['plugin_type']['widget'][0]['value']['#disabled'] = TRUE;
      $form['server_node']['widget']['#options'] = $this->getServerNodesByType($enabled_api->entityType());
    }

    $form['user_id']['#access'] = FALSE;

    return $form;
  }

当我检查父函数时,我注意到该行:

$form = $this->form($form, $form_state);在 class EntityForm(核心方法)中导致此问题。

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    // During the initial form build, add this form object to the form state and
    // allow for initial preparation before form building and processing.
    if (!$form_state->has('entity_form_initialized')) {
      $this->init($form_state);
    }

    // Ensure that edit forms have the correct cacheability metadata so they can
    // be cached.
    if (!$this->entity->isNew()) {
      \Drupal::service('renderer')->addCacheableDependency($form, $this->entity);
    }

    // Retrieve the form array using the possibly updated entity in form state.
    // This is causing my memory timeout.
    $form = $this->form($form, $form_state);

    // Retrieve and add the form actions array.
    $actions = $this->actionsElement($form, $form_state);
    if (!empty($actions)) {
      $form['actions'] = $actions;
    }

    return $form;
  }

如果我评论那一行,它工作正常,但这是将我的值保存在配置中所必需的。这也是核心,应该有效。

还有其他人遇到这个问题并且知道解决方案吗?

谢谢。

这已解决,错误是在 select 字段中加载了太多结果。