Drupal 8. Кастомная форма в попапе

Главные вкладки

Аватар пользователя symbians60v5 symbians60v5 1 апреля 2019 в 17:29

Здравствуйте. Пытаюсь вывести модальное окно с формой после нажатия на ссылку. Создал форму ( открывается при переходе по адресу). Так же подключил нужные библиотеки и передал ссылке необходимые свойства (код ниже). Однако при нажатии на ссылку она возвращает 200 код и сообщение об ошибке.

Собственно сам блок со ссылкой:

<?php
    $text 
$this->t($label);
    
$routeName 'wa_advice.form_report';

    

$options = [
      
'fragment' => $key,
      
'attributes' => [
        
'class' => ['use-ajax','content-action-' $key,],
        
'data-dialog-type' => 'modal',
      ],
    ];

    

$item Link::createFromRoute($text,$routeName,[],$options)->toRenderable();
    
$build['links'] = [
      
'#type' => 'container',
      
'#attributes' => [
        
'class' => [
          
'content-actions-list',
          
'post-links__list',
        ],
      ],
      
'items' => $items,
    ];
    
$build['#attributes']['class'][] = 'wa-content-actions';
    
$build['#attributes']['class'][] = 'text-center';
    
$build['#attached']['library'] = [
      
'core/drupal.dialog.ajax',
      
'core/jquery.form',
    ];
    return 
$build;
?>

routing.yml

<?php
wa_advice
.form_report:
  
path'/wa/report'
  
defaults:
    
_form'Drupal\wa_advice\Form\ReportForm'
    
_title'Report'
  
requirements:
    
_permission'access content'

?>

Сама форма

<?php
public function getFormId() {
    return 
'wa_report_form';
  }

  

/**
   * {@inheritdoc}
   */
  
public function buildForm(array $formFormStateInterface $form_state) {
    
$form['phone_number'] = array(
      
'#type' => 'tel',
      
'#title' => $this->t('Your phone number'),
    );
    
$form['actions']['#type'] = 'actions';
    
$form['actions']['submit'] = array(
      
'#type' => 'submit',
      
'#value' => $this->t('Save'),
      
'#button_type' => 'primary',
    );
    return 
$form;
  }

  

/**
   * {@inheritdoc}
   */
  
public function validateForm(array &$formFormStateInterface $form_state) {
    if (
strlen($form_state['values']['phone_number']) < 3) {
      
$this->setFormError('phone_number'$form_statet('The phone number is too short. Please enter a full phone number.'));
    }
  }

  

/**
   * {@inheritdoc}
   */
  
public function submitForm(array &$formFormStateInterface $form_state) {
    
drupal_set_message($this->t('Your phone number is @number', array('@number' => $form_state['values']['phone_number'])));
  }
?>

Скриншот самой ошибки

Просматриваю примеры в инете. Вроде все правильно. Но при этом ошибка. Если кто то может подсказать как вывести форму то заранее спасибо

Комментарии

Аватар пользователя gun_dose gun_dose 2 апреля 2019 в 9:32

Ваш файл роутинга подразумевает, что он должен отдавать страницу, на которой расположена форма. Консоль javascript говорит о том, что она именно это и получила - html-код страницы.

Вам нужно объявить свой контроллер, и в нём вызывать форму через formBuilder, а отдавать не рендер-массив, а AjaxResponse