Здравствуйте. Пытаюсь вывести модальное окно с формой после нажатия на ссылку. Создал форму ( открывается при переходе по адресу). Так же подключил нужные библиотеки и передал ссылке необходимые свойства (код ниже). Однако при нажатии на ссылку она возвращает 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 $form, FormStateInterface $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 &$form, FormStateInterface $form_state) {
if (strlen($form_state['values']['phone_number']) < 3) {
$this->setFormError('phone_number', $form_state, t('The phone number is too short. Please enter a full phone number.'));
}
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
drupal_set_message($this->t('Your phone number is @number', array('@number' => $form_state['values']['phone_number'])));
}
?>
Просматриваю примеры в инете. Вроде все правильно. Но при этом ошибка. Если кто то может подсказать как вывести форму то заранее спасибо
Комментарии
Скажите пожалуйста а работают ли на Вашем сайте пример попап из examples -> Form API Examples -> Modal form ?
Ваш файл роутинга подразумевает, что он должен отдавать страницу, на которой расположена форма. Консоль javascript говорит о том, что она именно это и получила - html-код страницы.
Вам нужно объявить свой контроллер, и в нём вызывать форму через formBuilder, а отдавать не рендер-массив, а AjaxResponse