View source
<?php
namespace Drupal\search_api_page\Form;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Form\BaseFormIdInterface;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Url;
use Symfony\Component\DependencyInjection\ContainerInterface;
class SearchApiPageBlockForm extends FormBase implements BaseFormIdInterface {
protected $languageManager;
protected $renderer;
protected $pageId = 'uninitialized';
protected $pageStorage;
public function __construct(LanguageManagerInterface $language_manager, RendererInterface $renderer, EntityStorageInterface $pageStorage) {
$this->languageManager = $language_manager;
$this->renderer = $renderer;
$this->pageStorage = $pageStorage;
}
public static function create(ContainerInterface $container) {
$entityTypeManager = $container
->get('entity_type.manager');
return new static($container
->get('language_manager'), $container
->get('renderer'), $entityTypeManager
->getStorage('search_api_page'));
}
public function setPageId($pageId) {
$this->pageId = $pageId;
}
public function getBaseFormId() {
return 'search_api_page_block_form';
}
public function getFormId() {
return 'search_api_page_block_form_' . $this->pageId;
}
public function buildForm(array $form, FormStateInterface $form_state, $args = []) {
$search_api_page = $this->pageStorage
->load($this->pageId);
$langcode = $this->languageManager
->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
->getId();
$form['search_api_page'] = [
'#type' => 'value',
'#value' => $search_api_page
->id(),
];
$default_value = '';
if (isset($args['keys'])) {
$default_value = $args['keys'];
}
if ($default_value === '') {
$request = $this
->getRequest();
if (trim($search_api_page
->getPath(), '/') === trim($request
->getPathInfo(), '/')) {
$default_value = $this
->getRequest()
->get('keys');
}
}
$keys_title = $this
->t('Enter the terms you wish to search for.', [], [
'langcode' => $langcode,
]);
$form['keys'] = [
'#type' => 'search',
'#title' => $this
->t('Search', [], [
'langcode' => $langcode,
]),
'#title_display' => 'invisible',
'#size' => 15,
'#default_value' => $default_value,
'#attributes' => [
'title' => $keys_title,
],
];
$form['actions'] = [
'#type' => 'actions',
];
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Search', [], [
'langcode' => $langcode,
]),
];
if (!$search_api_page
->getCleanUrl()) {
$route = 'search_api_page.' . $langcode . '.' . $search_api_page
->id();
$form['#action'] = Url::fromRoute($route)
->toString();
$form['#method'] = 'get';
$form['actions']['submit']['#name'] = '';
}
$this->renderer
->addCacheableDependency($form, $search_api_page
->getConfigDependencyName());
$this->renderer
->addCacheableDependency($form, $langcode);
$form['#attributes']['class'][] = 'search-form';
$form['#attributes']['class'][] = 'search-block-form';
$form['#attributes']['class'][] = 'container-inline';
$form['actions']['submit']['#attributes']['class'][] = 'search-form__submit';
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$langcode = $this->languageManager
->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
->getId();
$route = 'search_api_page.' . $langcode . '.' . $form_state
->getValue('search_api_page');
$routeArguments = [
'keys' => $form_state
->getValue('keys'),
];
$form_state
->setRedirectUrl(Url::fromRoute($route, $routeArguments));
}
}