hn-8.x-1.x-dev/modules/hn_frontend/src/Form/SettingsForm.php

modules/hn_frontend/src/Form/SettingsForm.php
<?php

namespace Drupal\hn_frontend\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\Routing\Exception\RouteNotFoundException;

/**
 * Class ConfigForm.
 */
class SettingsForm extends ConfigFormBase {

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'hn_frontend.settings',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'hn_frontend_settings';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('hn_frontend.settings');

    $routes = implode(PHP_EOL, $config->get('routes'));

    $form['routes'] = [
      '#type' => 'textarea',
      '#title' => t('Routes to exclude'),
      '#description' => t('One configuration name per line.<br />Examples: <ul><li>user.login</li><li>hn.endpoint</li><li>rest.* (will ignore all routes that starts with <em>rest.</em>)</li><li>~rest.example.rest (will force redirect on this route, even if ignored by a wildcard)</li></ul>'),
      '#default_value' => $routes,
    ];

    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state->getValues();
    $routes = array_map('trim',
      array_filter(explode(PHP_EOL, $values['routes']))
    );

    /* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
    $route_provider = \Drupal::service('router.route_provider');

    if (!in_array('user.login', $routes)) {
      $form_state->setErrorByName('user.login', t('Route %name should not be removed.', [
        '%name' => 'user.login',
      ]));
      array_push($routes, 'user.login');
    }

    if (!in_array('hn.endpoint', $routes)) {
      drupal_set_message(t("You removed %name from excluded routes, we don\'t recommend this.", [
        '%name' => 'hn.endpoint',
      ]), 'warning');
    }

    // When a route does not exists getRouteByName
    // will return a RouteNotFoundException.
    foreach ($routes as $route) {
      try {
        $route_provider->getRouteByName($route);
      }
      catch (RouteNotFoundException $exception) {
        if (strpos($route, '*') === FALSE && strpos($route, '~') === FALSE) {
          $form_state->setErrorByName($route, t('Route %name does not exist', [
            '%name' => $route,
          ]));
        }
      }
    }

    $form_state->setValue('routes', $routes);

    parent::validateForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state->getValues();

    // Save the config.
    $this->config('hn_frontend.settings')
      ->set('routes', $values['routes'])
      ->save();

    parent::submitForm($form, $form_state);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc