Los servicios se declaran el archivo my_module.services.yml que se debe encontrar en la raiz de mi modulo custom.
services:
my_module.servicios_crud:
class: 'Drupal\nombres\Services\ServiciosService'
my_module.icecream:
class: Drupal\nombres\Services\scoopdb
arguments: ['@database'] //Los argumentos son para declarar otros servicios que
deben estar inyectados en el servicio
Dentro de la carpeta de src/Services encontraremos las clases de nuestros servicios.
Ej.Scoopdb.php
<?php
namespace Drupal\my_module\Services;
use Drupal\Core\Database\Connection;
/**
* Class Scoopdb.
*/
class Scoopdb {
/**
* @var \Drupal\Core\Database\Connection $database
*/
protected $database;
/**
* Constructs a new Scoopdb object.
* @param \Drupal\Core\Database\Connection $connection
*/
public function __construct(Connection $connection) {
$this->database = $connection;
}
public function test(){
return dpm('test');
}
}
Para inyectar un servicio en un controlador debemos importar el servicio:
use Drupal\nombres\Services\Scoopdb;
Y dentro de la clase principal del controlador debemos instanciar el servicio para poder utilizar sus metodos.
En el contructor debemos llamar al servicio.
protected $database;
protected $scoopdb;
/**
* Crea una nueva instancia del controlador.
*
* @param \Drupal\Core\Database\Connection $database
* La conexión a la base de datos.
*/
public function __construct(Connection $database, Scoopdb $scoopdb)
{
$this->database = $database;
$this->scoopdb = $scoopdb;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container)
{
return new static(
$container->get('database'),
$container->get('nombres.icecream'),
);
}
Ahora dentro de cualquier metodo llamamos a nuestro servicio:
$instancia = $this->scoopdb;
$resultado = $instancia->cargar();
Comentarios
Publicar un comentario