Serviço


O serviço é um recurso fundamental para gerenciar regras de negócio. Trata-se de uma classe que pode ser invocada por meio de uma chave via contêiner, e que fica disponível em qualquer módulo da plataforma Badiu.Net.

Para criar um serviço, basta desenvolver uma classe e registrá-la. O acesso à classe por meio da chave, via contêiner, equivale à sua instanciação no paradigma da programação orientada a objetos.

1. Criar classe

A seguir, apresentamos um serviço já existente para ilustrar o processo. A partir dele, você poderá reutilizar a lógica e customizar um serviço específico para o seu módulo.

O exemplo abaixo refere-se ao serviço de gerenciamento de tags. A classe foi criada em:

BADIUNET_DIR_INSTALL/Badiu/System/ModuleBundle/Model/Lib/TagManagerLib.php

<?php
namespace Badiu\System\ModuleBundle\Model\Lib;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Badiu\System\CoreBundle\Model\Functionality\BadiuModelLib;
class TagManagerLib extends BadiuModelLib {
    function __construct(Container $container) {
        parent::__construct($container);
    }
    public function add($param) {
        // lógica para adicionar tag
    }
    public function get($param) {
        // lógica para recuperar tag
    }
}

Na classe, a lógica é organizada em funções. Neste exemplo, temos as funções add e get. No seu caso, crie as funções que melhor representem a lógica do seu negócio.

2. Registro do serviço

badiu.system.module.tag.lib.manager:
    class: Badiu\System\ModuleBundle\Model\Lib\TagManagerLib
    shared: false
    public: true
    arguments: ['@service_container']

O serviço deve ser registrado no arquivo services.yml, com a chave seguindo o padrão de nomenclatura da plataforma Badiu.Net.

 

3. Invocar serviço

$tagmanager = $this->getContainer()->get('badiu.system.module.tag.lib.manager');
$param = array();
$tagmanager->add($param);

Dessa forma, a lógica de negócio é organizada de maneira flexível e reutilizável. Como o serviço é invocado por meio de uma chave do tipo string, a chamada pode ser feita dinamicamente, o que amplia a flexibilidade da aplicação.