Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Padrão MVC

Pelo que entendi deste padrão, o Controller solicita ao Model as informações do BD e retorna para a View da forma pretendida certo?

Bom, resolvi criar uma classe personalizada no Laravel, no paradigma OO, quando terminei de escrever ela, percebi que ela se intrometeu entre o Controller e o Model, ficou assim:

Controller:

class NfeController extends Controller {
    public function geraDanfeNfe($id) {
        $NFe = new Nfe($id);
        echo $NFe->geraDanfe();
    }
}

Classe:

class Nfe {
    $xml;
    public function __construct($id) {
        // AQUI É FEITO AS BUSCAS NO BANCO DE DADOS
        // QUE MONTA TODA A ESTRUTURA DA NOTA
        $this->xml = $nfe->getXML();
    }

    public function geraDanfe() {
        // ALGUMAS CONFIGURAÇÕES
        return $danfe->render();
    }
}

Meu controller não está tendo acesso direto ao Model, ele só cria o objeto e toma as ações como montar Danfe, salvar XML no servidor, transmitir etc... Quebrei o MVC da minha aplicação?

5 respostas
solução!

Oi Jefferson, não acho que tenha quebrado o MVC não. Era só esse o questionamento?

Lembrando que, apesar de você não está quebrando o MVC, você pode estar misturando responsabilidades. Exemplo, o mesmo modelo não deve gerar e transmitir a NF.

O método render nesse modelo faz o que? Será que ele não deveria ser chamado no controller?

Colocar classe asssim isolada é comum?

o render veio da API que estou utilizando:

$danfe = new Danfe($this->xml, 'P', 'A4', 'logo.png', 'I', '');
$danfe->montaDANFE();
$pdf = $danfe->render();

só que eu dispensei esse $pdf.

Entendi, então tá certo. Sim, é bem comum dependendo do caso. Vai servir pra isolar o código da API que você usa em uma parte do seu código. Se não fizer isso, você pode ter vários pontos da aplicação usando código da API e caso a API mude alguma coisa, em vez de mudar em apenas um canto, seja ele um modelo ou helper, você vai precisar mudar em vários pontos, o que nem sempre é bom.

Por curiosidade, que API é?

Na verdade é um Framework kkkk

NFePHP

https://github.com/nfephp-org/sped-nfe

Agora esses dois não sei o que são, creio que só classes que auxiliam:

https://github.com/nfephp-org/sped-da (gera os DANFEs)

https://github.com/nfephp-org/sped-mail (envia XML e DANFE por E-mail)

Sim, são componentes do framework. Bom, obrigado por compartilhar com a gente aqui!

Abraço, bons estudos!