更改drupal表单中隐藏的输入值

问题描述 投票:0回答:1

我的屏幕上有两个字段:一个按 ID 列出用户列表的 select 和 2 个单选按钮

当用户更改选择值时,我想更改 *ajax * 中的 hidden 输入“has_photo”的值。

这就是我的表单在 buildForm() 中的样子(扩展 FormBase):

    $form['card']['user'] = [
      '#type' => 'select',
      '#empty_option' => 'Choose',
      '#options' => $users,
      '#default_value' => $id_user,
      '#ajax' => [
        'method' => 'replace',
        'callback' => '::addPhotoWarning',
        'event' => 'change',
        'wrapper' => 'hasPhoto'
      ],
    ];

    $form['card']['hasPhoto'] = [
      '#type' => 'number',
      '#value' => $hasPhoto
    ];

还有我的ajax函数:

  /**
   * @param array $form
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return void
   */
  public function addPhotoWarning(array &$form, FormStateInterface $form_state) {

    $idUser = $form_state->getUserInput()['card']['user'] ? $form_state->getUserInput()['card']['user'] : NULL;
    if ($idUser) {
        $hasPhoto = $this->hasPhoto($idUser);
        $form['card']['user']['#value'] = $hasPhoto ? '1' : '0';
    }
    return $form['card']['hasPhoto'];
  }

$form['card']['hasPhoto'] 是一个输入类型数字,因为我无法找到如何重新加载这个值,因为我使用了隐藏类型,因为drupal ajax api需要一个包装器。当用户更改选择的值时,我不想重新加载所有表单(因为用户可以在其他输入中放入其他值)

我使用的是drupal 9.5

php ajax drupal
1个回答
0
投票

您可以添加新的 hasPhotoWrapper 字段:

$form['card']['hasPhotoWrapper'] = [
  '#type' => 'markup',
  '#markup' => '<div id="hasPhoto"></div>',
];

并将 hasPhoto 字段更新为

$form['card']['hasPhoto'] = [
  '#type' => 'hidden',
  '#value' => $hasPhoto,
  '#prefix' => '<div id="hasPhoto">',
  '#suffix' => '</div>',
];

此外,Ajax 回调为

public function addPhotoWarning(array &$form, FormStateInterface $form_state) {
  $idUser = $form_state->getUserInput()['card']['user'] ? $form_state->getUserInput()['card']['user'] : NULL;
  if ($idUser) {
      $hasPhoto = $this->hasPhoto($idUser);
      $form['card']['hasPhoto']['#value'] = $hasPhoto ? '1' : '0';
  }
  return $form['card']['hasPhotoWrapper'];
}
© www.soinside.com 2019 - 2024. All rights reserved.