Помощь начинающим веб
разработчикам

Drupal 8 – Выводим кастомную форму в кастомном блоке

22.06.2017

Мы с вами уже умеем создавать простейшие формы и создать программно блоки. Теперь пришло время соединить все наши знания воедино, а именно займемся выводом кастомной формы в кастомном блоке.

Останавливаться на подробном создании блока и формы я не буду, кто не в курсе – идем по ссылкам выше.

Наш модуль будет называться custom_form_in_block.

Файл custom_form_in_block

name: Custom form in Block
description: Простой пример вывода кастомной формы,в кастомном блоке
core: 8.x
type: module
dependencies:
- block

Создаем форму - файл CustomFormInBlockForm.php

<?php
/**
 * @file
 * Contains \Drupal\custom_form_in_block\Form.
 */
namespace Drupal\custom_form_in_block\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;

class CustomFormInBlockForm extends FormBase {
  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'custom_form_in_block_form';
  }
  /**
   * {@inheritdoc}
   * Form
   */
  public function buildForm(array $form, FormStateInterface $form_state) {

    # Text field
    $form['your_name'] = array(
      '#type' => 'textfield',
      '#title' => t('Your Name:'),
      '#required' => TRUE,
      '#attributes' => array(
        'placeholder' => 'Ivan Ivanov',
      ),
    );

    $form['actions']['#type'] = 'actions';
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#value' => 'This meeeee',
    );

    return $form;
  }
  /**
   * {@inheritdoc}
   * Submit
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {

    $your_name = $form_state->getValue('your_name');
    drupal_set_message($your_name);


  }
}

Создаем блок - файл CustomFormInBlock.php

<?php

/**
 * @file
 * Contains \Drupal\custom_form_in_block\Plugin\Block
 */

namespace Drupal\custom_form_in_block\Plugin\Block;

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormInterface;

/**
 * Provides a 'custom_form_in_block' block.
 *
 * @Block(
 *   id = "custom_form_in_block",
 *   admin_label = @Translation("Custom form in block"),
 *   category = @Translation("Example custom form in block")
 * )
 */
class CustomFormInBlock extends BlockBase {
  /**
   * {@inheritdoc}
   */
  public function build() {

    $form = \Drupal::formBuilder()->getForm('Drupal\custom_form_in_block\Form\CustomFormInBlockForm');
    return $form;

  }
}

Хочу заметить, что drupal_get_form() больше не существует в Drupal 8, ему на смену пришел formBuilder(), который принимает в качестве параметра класс формирования формы.

Активируем модуль, выводим в необходимом регионе и смотрим на результат.

custom_form_custom_form_drupal_8_1.png

На этом можно закончить.

Скачать модуль используемый в примере

Скачать

Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Комментарии (2)

Profile picture for user Александр
Александр
25.07.2017

Спасибо, отличная статья, мне как новичку интересно читать. Было бы круто, если бы еще были добавлены комментарии некоторых строк кода, чтобы понимать, что происходит. Например для этой: 

$form['actions']['#type'] = 'actions'; 

Profile picture for user pantey
pantey
25.07.2017
<?php
$form['actions']['#type'] = 'actions'; 

Предоставляет враппер для объединения нескольких кнопок в форме. Здесь подробнее

Добавить комментарий

- Оповестить о новом комментарии.
- Все комментарии
- Только мои комментарии