Редактирование узла с помощью AJAX


Я загружаю форму редактирования узла в блок и хочу использовать Ajax для сохранения узла.

class MyBLockNameBlock extends BlockBase{

  public function build() {
    //I find the $nid i want to display

    $entity = Node::load($nid);
    $form = \Drupal::service('entity.form_builder')->getForm($entity, 'default');

    $form['actions']['#type'] = 'actions';
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Submit'),
      '#ajax' => [
      'wrapper' => $wrapper_id,
      'callback' => '::ajaxCallback',
     ],
   ];

   $block['form'] = $form;
   $block['#markup'] = $this->t('<h3>Project Plan</h3>');
   return $block;

  }

  public function validateForm(array &$form, FormStateInterface $form_state)
  {
    if($form_state->hasAnyErrors()){
      return $form;
    }
  }

  public function ajaxCallback(array &$form, FormStateInterface $form_state)
  {
     return $form;
  }
}

Но это не работает. Если я изменю форму $['действия']['отправить'] на

$form['actions']['submit'] = [
  '#type' => 'submit',
  '#value' => $this->t('Submit'),
  '#attributes'   =>array('class' => array('btn btn-info use-ajax-submit')),
  '#ajax' => [
    'wrapper' => $wrapper_id,
    'callback' => '::ajaxCallback',
  ],
];

Ajax работает, но он не проверяет форму. Должен ли я самостоятельно создавать проверку для каждого поля?

Также я попробовал модуль ajax_form_entity, но даже если ajax работает, перезагружает форму, не очищает поля после отправки и все еще не утверждать.

Также мне нужен дополнительный обработчик, когда пользователь нажимает кнопку "Отправить", чтобы обновить поле из другой формы.

Есть идеи?

Author: kiamlaluno, 2017-05-19

1 answers

Вы не можете добавлять элементы в форму за пределами определения формы. Вы добавляете элементы формы в свой класс блоков, поэтому он работает не так, как вы ожидаете. Если вы хотите изменить форму сущности, вам нужно будет использовать функцию hook_form_alter() и добавить туда свой ajax.

 0
Author: Jaypan, 2017-05-19 18:25:36