Introducción
Esta guía te mostrará cómo crear un módulo en Drupal 10 que utilice ClientFactory para realizar solicitudes HTTP y permita configurar la URL base desde un formulario de configuración.
Paso 1: Crear el Módulo
Crea la carpeta de tu módulo en web/modules/custom/mi_modulo.
Crea un archivo mi_modulo.info.yml:
name: 'Mi Módulo' type: module description: 'Módulo para demostrar el uso de ClientFactory en Drupal 10 con configuración.' core_version_requirement: ^10 package: Custom dependencies: - drupal:core
Paso 2: Crear el Archivo de Configuración Predeterminado
Crea un archivo en config/install/mi_modulo.settings.yml:
mi_modulo.api_base_url: 'https://api.ejemplo.com'
Paso 3: Crear el Servicio
Crea el archivo src/Service/HttpClientService.php:
namespace Drupal\mi_modulo\Service;
use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface;
use Drupal\Core\Http\ClientFactory;
use Drupal\Core\Config\ConfigFactoryInterface;
class HttpClientService {
protected $clientFactory;
protected $configFactory;
public function __construct(ClientFactory $clientFactory, ConfigFactoryInterface $configFactory) {
$this->clientFactory = $clientFactory;
$this->configFactory = $configFactory;
}
/**
* Realiza una petición GET a una URL proporcionada.
*
* @param string $endpoint
* El endpoint de la API.
*
* @return array
* La respuesta decodificada en JSON.
*/
public function makeGetRequest(string $endpoint): array {
$config = $this->configFactory->get('mi_modulo.settings');
$baseUrl = $config->get('mi_modulo.api_base_url');
$client = $this->clientFactory->fromOptions([
'base_uri' => $baseUrl,
'timeout' => 10,
'headers' => [
'Accept' => 'application/json',
],
]);
$response = $client->get($endpoint);
return json_decode($response->getBody(), true);
}
}
Paso 4: Registrar el Servicio en mi_modulo.services.yml
Crea o edita el archivo mi_modulo.services.yml:
services:
mi_modulo.http_client_service:
class: 'Drupal\mi_modulo\Service\HttpClientService'
arguments: ['@http_client_factory', '@config.factory']
Paso 5: Crear el Formulario de Configuración
Crea el archivo src/Form/SettingsForm.php:
namespace Drupal\mi_modulo\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
class SettingsForm extends ConfigFormBase {
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return ['mi_modulo.settings'];
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'mi_modulo_settings_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('mi_modulo.settings');
$form['api_base_url'] = [
'#type' => 'url',
'#title' => $this->t('API Base URL'),
'#default_value' => $config->get('mi_modulo.api_base_url'),
'#description' => $this->t('Enter the base URL for the API.'),
];
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->configFactory->getEditable('mi_modulo.settings')
->set('mi_modulo.api_base_url', $form_state->getValue('api_base_url'))
->save();
parent::submitForm($form, $form_state);
}
}
Paso 6: Registrar el Formulario de Configuración en mi_modulo.routing.yml
Crea o edita el archivo mi_modulo.routing.yml:
mi_modulo.settings:
path: '/admin/config/mi-modulo/settings'
defaults:
_form: '\Drupal\mi_modulo\Form\SettingsForm'
_title: 'Mi Módulo Settings'
requirements:
_permission: 'administer site configuration'
Paso 7: Crear un Controlador para Utilizar el Servicio
Crea src/Controller/HttpClientController.php:
namespace Drupal\mi_modulo\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\mi_modulo\Service\HttpClientService;
class HttpClientController extends ControllerBase {
protected $httpClientService;
public function __construct(HttpClientService $httpClientService) {
$this->httpClientService = $httpClientService;
}
public static function create(ContainerInterface $container) {
return new static(
$container->get('mi_modulo.http_client_service')
);
}
public function showData() {
$url = '/data'; // Endpoint de ejemplo.
$data = $this->httpClientService->makeGetRequest($url);
return [
'#type' => 'markup',
'#markup' => '<pre>' . print_r($data, TRUE) . '</pre>',
];
}
}
Paso 8: Definir la Ruta del Controlador
Añade una ruta en mi_modulo.routing.yml:
mi_modulo.http_client_controller:
path: '/mi-modulo/http-client'
defaults:
_controller: '\Drupal\mi_modulo\Controller\HttpClientController::showData'
_title: 'HTTP Client Data'
requirements:
_permission: 'access content'
Conclusión
Has creado un módulo de Drupal 10 que utiliza ClientFactory para realizar solicitudes HTTP y un formulario de configuración para gestionar la URL base de la API. Este módulo permite a los administradores configurar los detalles del servicio de forma sencilla y flexible desde la interfaz de Drupal.