Ir para conteúdo
Fórum Script Brasil
  • 0

MVC: o roteador do roteador


Frank K Hosaka

Pergunta

Eu tenho um código que ajuda o usuário a escolher um período de apuração.

O problema é que eu tenho um código chamado balancete, outro chamado razão e finalmente um chamado Mercado Pago. Os três precisam da rotina para escolher o período de apuração. A pergunta é: como o código da apuração vai saber quem iniciou o serviço?

No PHP, temos o comando function ( ), ele devolve o comando para quem lhe chamou, sem precisar de nenhum código adicional.

Eu tentei colocar um view dentro da function ( ) e o resultado foi um desastre.

A minha saída foi criar um roteador dentro da função apuração.

Para chamar a função, usei o comando <a href=?ControleDiario.apuracao.razao> dentro do view balancete e do view razão e <a href=?ControleDiario.apuracao.mercado> dentro do view Mercado Pago. Para melhorar mais ainda, a própria função apuração recebe o valor escolhido pelo usuário, coisa do tipo <a href=?ControleDiario.apuracao.2024-02> dentro do view Apuracao. Ou seja, eu coloquei o nome do solicitante bem como a apuração escolhida pelo usuário dentro da mesma chave. Olha só a baderna que ficou:

Arquivo Controles/ControleDiario.php
<?php

class ControleDiario extends Controle 
{

    public function apuracao()
    {
        if(isset($_GET['apuracao']))
        {
            if(is_numeric(substr($_GET['apuracao'],0,4)))
            {
                $apuracao=apuracao($_GET['apuracao']."-1");
                $_SESSION['dia']=$apuracao->primeiroDia;
                if($_SESSION['endereco']=="mercado")
                {
                    return $this->mercado();
                }
                return $this->razao();
            } else {
                $_SESSION['endereco']=$_GET['apuracao'];
            }
        }
        $primeiroDia=$this->Conexao->select('dia from tbdiario order by dia')[0]->dia;
        $ultimoDia=$this->Conexao->select('dia from tbdiario order by dia desc')[0]->dia;
        $apuracoes=[];
        while($primeiroDia<=$ultimoDia)
        {
            $apuracoes[]=date('Y-m',strtotime($primeiroDia));
            $data=new DateTime($primeiroDia);
            $primeiroDia=date_modify($data,'+1 month')->format('Y-m-1');
        }
        rsort($apuracoes);
        $this->view('Apuracao',['apuracoes'=>$apuracoes]);
    }
	// ...
}

Arquivo Views/Apuracao.php
<?php
include VISOES . 'Menu.php';
echo "<table class='table table-striped'>
    <tr class='fw-semibold'><td><td>Selecione o período de apuração";
foreach($apuracoes as $apuracao)
{
    $ano = substr($apuracao,0,4);
    $mes = substr($apuracao,5,2);
    if(!isset($anoAnterior))
    {
        echo "<tr><td>$ano<td>";$anoAnterior=$ano;
    }
    if($ano!==$anoAnterior)
    {
        echo "<tr><td>" . $ano ."<td><a href=?ControleDiario.apuracao.$apuracao>$mes</a> ";
        $anoAnterior=$ano;
    } else {
        echo " <a href=?ControleDiario.apuracao.$apuracao>$mes</a> ";
    }
}
echo "</table>";

Isso é uma grande gambiarra, mas funciona.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...