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

Colocando uma classe dentro do view


Frank K Hosaka

Pergunta

O Livewire é muito engenhoso, ele coloca a classe e a view no mesmo ambiente. Pensei em fazer a mesma coisa com o PHP com a ajuda do Copilot, e hoje aprendi um truque novo:
 

function inicio() { return view('contadorView',['contador'=>$this]); }

Isso é bem engenhoso, eu jamais chegaria nesse código por conta própria. A seguir, a listagem que tenta imitar o tutorial do incremento que aparece na home page do Livewire:

 

arquivo contador.php
<?php
session_start();

class Contador {

    function __construct() {
        if (!isset($_SESSION['contador'])) { $_SESSION['contador'] = 0; }
    }

    function handleAjax() { echo $this->incrementar(); exit; }

    function incrementar() {
        $_SESSION['contador']++; return $_SESSION['contador'];
    }

    function inicio() { return view('contadorView',['contador'=>$this]); }

    function valor() { return $_SESSION['contador']; }

}

arquivo contadorView.php
<!DOCTYPE html>
<html>
<head>
    <title>Contador com Classe</title>
</head>
<body>
    <div id="contador">Contador: <strong><?= $contador->valor() ?></strong></div>
    <button onclick="incrementar()">Incrementar</button>

    <script>
    function incrementar() {
        fetch('?Contador.handleAjax')
            .then(response => response.text())
            .then(novoValor => {
                document.getElementById('contador').innerHTML = `Contador: <strong>${novoValor}</strong>`;
            });
    }
    </script>
</body>
</html>

arquivo incrementa.php
<?php
session_start();
$_SESSION['contador'] = ($_SESSION['contador'] ?? 0) + 1;
?>

<p>Contador: <strong><?= $_SESSION['contador'] ?></strong></p>
<button onclick="incrementar()">Incrementar</button>

arquivo index.php
<?php
function view($arquivo, $array = null) {
    if (!is_null($array)) {
        foreach ($array as $var => $value){
            ${$var} = $value;
        }
    }
    ob_start();
    include $arquivo . ".php";
    ob_flush();
}
spl_autoload_register(fn ($class) => 
    require str_replace('\\', DIRECTORY_SEPARATOR, strtolower($class)) . '.php');
if($_GET) {
    $rota = key($_GET);
    $segmentos=explode('_',$rota);
    $nomeControle=$segmentos[0];
    $metodo=$segmentos[1];
    $parametro=$segmentos[2] ?? 
    $controle=new $nomeControle();
    $controle->$metodo($parametro);
} else {
    header('location:?Contador.inicio');
}

Esse código é bem difícil de entender e fazer manutenção. O Livewire é pura mágica, graças a ele eu consegui fazer um monte de "modal". Claro que dá para fazer modal no PHP com a ajuda do Copilot, o problema é que eu não sei como apurar um código feito em JavaScript, por mais que eu me esforce não consigo imaginar o que exatamente o comando "fetch( )" faz.

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
      153k
    • Posts
      652,8k
×
×
  • Criar Novo...