Конфигурационная форма Drupal
Часть IV практического руководства по созданию базовых модулей Drupal 8
От .info к тестам, только основы
Пока все довольно аккуратно, но как мы можем изменить то, что видим? С некоторыми формами, конечно.
Простые сценарии использования см. В разделе «Параметры сайта и метки».
/src/Form/LoremIpsumForm.php
<?php namespace Drupal\loremipsum\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; class LoremIpsumForm extends ConfigFormBase { /** * {@inheritdoc} */ public function getFormId() { return 'loremipsum_form'; }
Мы начинаем наш файл настроек, расширяющий ConfigFormBase. Класс LoremIpsumForm - это класс, указанный в файле routing.yml.
Далее следует метод, который фактически строит форму настроек:
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { // Form constructor. $form = parent::buildForm($form, $form_state); // Default settings. $config = $this->config('loremipsum.settings');
Переменная $config - это место, где мы храним наши текущие настройки.
Затем мы определяем наши поля формы и возвращаем форму:
// Page title field. $form['page_title'] = array( '#type' => 'textfield', '#title' => $this->t('Lorem ipsum generator page title:'), '#default_value' => $config->get('loremipsum.page_title'), '#description' => $this->t('Give your lorem ipsum generator page a title.'), ); // Source text field. $form['source_text'] = array( '#type' => 'textarea', '#title' => $this->t('Source text for lorem ipsum generation:'), '#default_value' => $config->get('loremipsum.source_text'), '#description' => $this->t('Write one sentence per line. Those sentences will be used to generate random text.'), ); return $form; }
Мы также должны объявить методы validateForm (), submitForm () и getEditableConfigNames (), даже если мы их не используем:
/** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $config = $this->config('loremipsum.settings'); $config->set('loremipsum.source_text', $form_state->getValue('source_text')); $config->set('loremipsum.page_title', $form_state->getValue('page_title')); $config->save(); return parent::submitForm($form, $form_state); } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'loremipsum.settings', ]; } }
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.