
В этой статье мы рассмотрим, как добавить кнопку «Register» в форму авторизации в Drupal, которая будет перенаправлять пользователя на страницу регистрации. Мы добавим кнопку в раздел actions формы и используем правильный подход для создания ссылки через маршруты с помощью сервиса маршрутизации.
Задача
Нам нужно добавить кнопку «Register» в форму авторизации, которая будет перенаправлять на страницу /user/register при нажатии.
Решение
Чтобы добавить кнопку с перенаправлением на страницу регистрации, мы будем использовать сервис маршрутизации в Drupal. Мы добавим кнопку в разделе actions формы через хук hook_form_alter(). Для этого используем сервис маршрутов \Drupal\Core\Url, который генерирует правильный URL для страницы регистрации.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php namespace Drupal\MY_MODULE\Hook; use Drupal\Core\Hook\Attribute\Hook; use Drupal\Core\Url; /** * Hook implementations. */ class Hooks { /** * Implements hook_entity_form_alter(). */ #[Hook('form_alter')] function alter_form(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { if ($form_id == 'user_login_form') { $form['actions']['register'] = [ '#type' => 'button', '#value' => t('Register'), '#attributes' => [ 'onclick' => "window.location.href='" . Url::fromRoute('user.register')->toString() . "'; return false;", ], ]; } } } |
Пояснения
- Проверка формы: Мы проверяем, что это форма авторизации, с помощью условия
$form_id == 'user_login_form'. Это гарантирует, что кнопка будет добавлена только в форму логина. - Добавление кнопки: Мы добавляем кнопку типа
buttonв разделactionsформы. Атрибут#valueзадаёт текст кнопки (в нашем случае «Register»). - Переход по ссылке: Для того чтобы кнопка выполняла переход, мы используем атрибут
#attributes['onclick']. Это позволяет выполнить JavaScript, который перенаправляет пользователя на страницу регистрации с помощьюwindow.location.href. Ссылка на страницу регистрации генерируется через сервис маршрутизацииUrl::fromRoute('user.register')->toString().Url::fromRoute('user.register')— создает объект URL для маршрута страницы регистрации (/user/register).toString()— преобразует объект URL в строку.
return false;: Это нужно для того, чтобы предотвращать стандартное поведение кнопки (отправку формы) и оставить только выполнение редиректа.

