Dúvida sobre URL após Delete com MVC
Estou começando na área do PHP na estrutura MVC (sem nenhum framework back-end, apenas bootstrap) e no meu formulário eu utilizo algo do tipo
<?php foreach ($this->params as $p) { ?>
<tr>
<th><?= $p['id'] ?></th>
<td><?= $p['nome_movimento'] ?></td>
<td><?= $p['tipo'] == 1 ? 'Lucro' : 'Despesa' ?></td>
<td>
<a href="<?= $delete.'id='.$p['id'] ?>"><i class="fa-solid fa-trash"></i></a>
</td>
</tr>
<?php } ?>
esse código basicamente imprime algumas informações em tela e, ao clicar na minha tag <a> onde, envia uma URL com o controller a ser acessado, o evento e o parametro sendo o ID do registro que está imprimindo em tela
--basicamente cai aqui dentro--
A minha função listar basicamente renderiza a View instanciada que é passada manualmente depois.
após a renderização a URL do meu navegador permanece com a URL que foi passada ali no delete e isso está causando alguns problemas de manuseio da página. Já tentei usar um header(location) porém eu preciso enviar alguns parâmetros para a página.
(Tenham pena da minha alma pois não sei programar direito)
<?php foreach ($this->params as $p) { ?>
<tr>
<th><?= $p['id'] ?></th>
<td><?= $p['nome_movimento'] ?></td>
<td><?= $p['tipo'] == 1 ? 'Lucro' : 'Despesa' ?></td>
<td>
<a href="<?= $delete.'id='.$p['id'] ?>"><i class="fa-solid fa-trash"></i></a>
</td>
</tr>
<?php } ?>
esse código basicamente imprime algumas informações em tela e, ao clicar na minha tag <a> onde, envia uma URL com o controller a ser acessado, o evento e o parametro sendo o ID do registro que está imprimindo em tela
--basicamente cai aqui dentro--
public function excluir($key) { if ($this->model->excluir($key)){ $this->finalMessage('Registro deletado com sucesso'); } } public function finalMessage($message) { $params = ['final_message' => $message]; $this->listar($params); }
A minha função listar basicamente renderiza a View instanciada que é passada manualmente depois.
após a renderização a URL do meu navegador permanece com a URL que foi passada ali no delete e isso está causando alguns problemas de manuseio da página. Já tentei usar um header(location) porém eu preciso enviar alguns parâmetros para a página.
(Tenham pena da minha alma pois não sei programar direito)
Kauan Oliveira
Curtidas 0
Melhor post
Frank Hosaka
07/06/2023
<a href="/financias/movimentotipo/excluir/id=19"><i class="fa-solid fa-trash"></i></a>
Ou seja, o formato da URL do elemento <a> é sempre <a href=diretorio/arquivo.php?variavel=valor>, e o arquivo.php pegaria a variavel=valor através do comando $_GET.
GOSTEI 1
Mais Respostas
Frank Hosaka
07/06/2023
O problema não é URL mas sim HTML, você está usando o elemento <a> de maneira inadequada, a gramática dele é assim:
<a href=url.php?excluir=<?=$id?>. Na listagem a seguir, eu coloquei um exemplo para o elemento chamar a mesma página.
<a href=url.php?excluir=<?=$id?>. Na listagem a seguir, eu coloquei um exemplo para o elemento chamar a mesma página.
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <body class="w-25 mx-auto p-3"> <?php if(isset($_GET['excluir'])){ $id=$_GET['excluir'];echo "Vai ser excluído o lançamento $id";exit;} $params=[["id"=>1,"nome_movimento"=>"dinheiro","tipo"=>1]]; $params[]=["id"=>2,"nome_movimento"=>"camisinha","tipo"=>2]; echo "<table class='table table-striped'><th>Id<th>Histórico<th>Tipo<th>Ação"; foreach ($params as $p) { echo "<tr><td>".$p['id']; echo "<td>".$p['nome_movimento']; if($p['tipo']==1){$tipo='Receita';} else {$tipo='Despesa';} echo "<td>$tipo"; echo "<td><a href=?excluir=".$p['id'].">Excluir <i class='fa fa-trash-o'></i></a>";}
GOSTEI 0
Frank Hosaka
07/06/2023
O problema não é URL mas sim HTML, você está usando o elemento <a> de maneira inadequada, a gramática dele é assim:
<a href=url.php?excluir=<?=$id?>. Na listagem a seguir, eu coloquei um exemplo para o elemento chamar a mesma página.
<a href=url.php?excluir=<?=$id?>. Na listagem a seguir, eu coloquei um exemplo para o elemento chamar a mesma página.
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <body class="w-25 mx-auto p-3"> <?php if(isset($_GET[''excluir''])){ $id=$_GET[''excluir''];echo "Vai ser excluído o lançamento $id";exit;} $params=[["id"=>1,"nome_movimento"=>"dinheiro","tipo"=>1]]; $params[]=["id"=>2,"nome_movimento"=>"camisinha","tipo"=>2]; echo "<table class=''table table-striped''><th>Id<th>Histórico<th>Tipo<th>Ação"; foreach ($params as $p) { echo "<tr><td>".$p[''id'']; echo "<td>".$p[''nome_movimento'']; if($p[''tipo'']==1){$tipo=''Receita'';} else {$tipo=''Despesa'';} echo "<td>$tipo"; echo "<td><a href=?excluir=".$p[''id''].">Excluir <i class=''fa fa-trash-o''></i></a>";}
GOSTEI 0
Kauan Oliveira
07/06/2023
O problema não é URL mas sim HTML, você está usando o elemento <a> de maneira inadequada, a gramática dele é assim:
<a href=url.php?excluir=<?=$id?>. Na listagem a seguir, eu coloquei um exemplo para o elemento chamar a mesma página.
<a href=url.php?excluir=<?=$id?>. Na listagem a seguir, eu coloquei um exemplo para o elemento chamar a mesma página.
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <body class="w-25 mx-auto p-3"> <?php if(isset($_GET[''''excluir''''])){ $id=$_GET[''''excluir''''];echo "Vai ser excluído o lançamento $id";exit;} $params=[["id"=>1,"nome_movimento"=>"dinheiro","tipo"=>1]]; $params[]=["id"=>2,"nome_movimento"=>"camisinha","tipo"=>2]; echo "<table class=''''table table-striped''''><th>Id<th>Histórico<th>Tipo<th>Ação"; foreach ($params as $p) { echo "<tr><td>".$p[''''id'''']; echo "<td>".$p[''''nome_movimento'''']; if($p[''''tipo'''']==1){$tipo=''''Receita'''';} else {$tipo=''''Despesa'''';} echo "<td>$tipo"; echo "<td><a href=?excluir=".$p[''''id''''].">Excluir <i class=''''fa fa-trash-o''''></i></a>";}
Deixa eu ver se entendi, nesse caso ele vai executar a função do meu controller mas não vai ficar a url? como assim?
GOSTEI 0
Frank Hosaka
07/06/2023
Deixa eu ver se entendi, nesse caso ele vai executar a função do meu controller mas não vai ficar a url? como assim?
O código que você está defendendo é esse:
<a href="<?= $delete.'id='.$p['id'] ?>"><i class="fa-solid fa-trash"></i></a>
1) você não pode usar o comando abreviado do PHP <?= quando você quer definir o valor de uma variável tipo $delete = $p['id']
2) o elemento <a href= precisa de uma URL
3) na gramática do PHP $delete.'id='.$p['id'] só pode ser usado quando a intenção é ajuntar texto. Se for para apresentar na tela, precisa do comando echo, se for atribuir a uma variável, a variável que vai receber o valor tem que vir do lado esquerdo
4) Não dá para saber o que esse comando faz, eu precisaria de todo código para saber se o processador chegaria até esse comando.
5) Quando alguém me fala de controlador, eu logo lembro do Laravel, basicamente dividido em três partes: o roteador, o visualizador e o controlador. De onde você tirou a ideia do controlador?
GOSTEI 0
Kauan Oliveira
07/06/2023
Deixa eu ver se entendi, nesse caso ele vai executar a função do meu controller mas não vai ficar a url? como assim?
O código que você está defendendo é esse:
<a href="<?= $delete.''id=''.$p[''id''] ?>"><i class="fa-solid fa-trash"></i></a>
1) você não pode usar o comando abreviado do PHP <?= quando você quer definir o valor de uma variável tipo $delete = $p[''id'']
2) o elemento <a href= precisa de uma URL
3) na gramática do PHP $delete.''id=''.$p[''id''] só pode ser usado quando a intenção é ajuntar texto. Se for para apresentar na tela, precisa do comando echo, se for atribuir a uma variável, a variável que vai receber o valor tem que vir do lado esquerdo
4) Não dá para saber o que esse comando faz, eu precisaria de todo código para saber se o processador chegaria até esse comando.
5) Quando alguém me fala de controlador, eu logo lembro do Laravel, basicamente dividido em três partes: o roteador, o visualizador e o controlador. De onde você tirou a ideia do controlador?
mas não está tendo nenhuma atribuição de valores e sim uma concatenação. A impressão do html da página em execução fica exatamente assim
<a href="/financias/movimentotipo/excluir/id=19"><i class="fa-solid fa-trash"></i></a>
movimentotipo = controller
excluir = método
id=19 = parametro passado
$delete armazena essa string = "/financias/movimentotipo/excluir/"
GOSTEI 0
Kauan Oliveira
07/06/2023
<a href="/financias/movimentotipo/excluir/id=19"><i class="fa-solid fa-trash"></i></a>
Ou seja, o formato da URL do elemento <a> é sempre <a href=diretorio/arquivo.php?variavel=valor>, e o arquivo.php pegaria a variavel=valor através do comando $_GET.
amigo acredito ter entendido, pelo visto estou utilizando o método errado no tratamento do dado. Testarei aqui, caso eu consiga darei um joinha na resposta. Agradeço a paciência tamo junto!
GOSTEI 1