Здравствуйте!
Создать форму в Drupal для выполнения SQL-запросов и отображения результатов можно с помощью создания собственного модуля. Здесь я дам вам шаги и пример кода, который поможет вам начать.
### Шаг 1: Создайте новый модуль
1. В директории `modules/custom` (если ее нет, создайте) создайте новую папку для вашего модуля. Назовем его, например, `my_custom_module`.
2. Внутри этой папки создайте файл `my_custom_module.info.yml` и добавьте следующий код:
```yaml
name: 'My Custom Module'
type: module
description: 'A custom module to execute SQL queries and display results.'
core_version_requirement: ^8 || ^9
package: Custom
dependencies:
- drupal:database
```
3. Создайте файл `my_custom_module.module`, который может остаться пустым, если не требуется дополнительная логика.
### Шаг 2: Создание маршрута и контроллера
4. Создайте файл `my_custom_module.routing.yml` и добавьте следующий код:
```yaml
my_custom_module.form:
path: '/my-custom-form'
defaults:
_form: '\Drupal\my_custom_module\Form\MyCustomForm'
_title: 'Custom SQL Form'
requirements:
_permission: 'access content'
```
### Шаг 3: Создание формы
5. Создайте папку `src/Form` внутри вашего модуля и добавьте туда файл `MyCustomForm.php`:
```php
<?php
namespace Drupal\my_custom_module\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Database\Database;
class MyCustomForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'my_custom_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['query'] = [
'#type' => 'textarea',
'#title' => $this->t('SQL Query'),
'#description' => $this->t('Enter your SQL query here.'),
'#rows' => 6,
];
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Execute'),
];
if ($form_state->get('results')) {
$form['results'] = [
'#type' => 'markup',
'#markup' => '<pre>' . print_r($form_state->get('results'), TRUE) . '</pre>',
];
}
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$query = $form_state->getValue('query');
$database = Database::getConnection();
try {
// Выполняем запрос (в данном примере SELECT).
$results = $database->query($query)->fetchAllAssoc('id'); // предположим, id - это поле в таблице.
$form_state->set('results', $results);
} catch (\Exception $e) {
// Обработка ошибок.
drupal_set_message($this->t('Error executing query: @message', ['@message' => $e->getMessage()]), 'error');
}
}
}
```
### Шаг 4: Включите модуль
6. Перейдите в административный интерфейс Drupal (`/admin/modules`), найдите ваш модуль и включите его.
### Шаг 5: Доступ к форме
7. Теперь вы можете перейти по адресу `/my-custom-form`, и у вас будет форма для ввода SQL-запроса и отображения результатов.
### Примечание
- Убедитесь, что ваш SQL-запрос корректен и безопасен. Следует принимать во внимание защиту от SQL-инъекций.
- Вы можете настроить разрешения и безопасность вашего модуля в зависимости от требований вашего приложения.
Этот пример даст вам базовую структуру, с которой вы можете начать работу. Удачи!