MVC Completo - #18 Model IV (Deletar)
26/04/2018Hoje vamos implementar a parte de deletar dados do nosso model. Vamos aproveitar a oportunidade para usar o Ajax com PHP e JQuery também. Utilizaremos a mesma tabela criada na aula de seleção acrescentando uma coluna que receberá inputs checkbox com o valor da Id do Banco de Dados.
Implementando o Ajax no MVC
Para usarmos o ajax a maneira mais fácil é utilizando a biblioteca JQuery. Vamos baixá-la e após baixá-la vamos salvar o JQuery dentro de public/js. Nessa mesma pasta vamos criar também o arquivo Javascript.js:
$(document).ready(function(){
var DIRPAGE="http://"+document.location.hostname+"/";
$('#FormSelect').on('submit',function(event){
event.preventDefault();
var Dados=$(this).serialize();
$.ajax({
url: DIRPAGE+'cadastro/seleciona',
method:'post',
dataType:'html',
data: Dados,
success:function(Dados){
$('.Resultado').html(Dados);
}
});
});
});
No diretório app/view/cadastro/main.php vamos criar uma div com a class Resultado que ficará responsável por receber o resultado do ajax acima:
<!-- Será responsável por receber a tabela de pesquisa-->
<div class="Resultado" style="width: 100%; height: 300px; background: pink;"></div>
Vamos criar também dentro desse mesmo diretório o Footer.php que linkará nosso arquivo JQuery e Javascript:
<script src="<?php echo DIRPAGE.'public/js/JQuery.js' ?>"></script>
<script src="<?php echo DIRPAGE.'public/js/Javascript.js' ?>"></script>
Criando o método deletar no controller e no model
Vamos criar primeiramente o model com o método deletarClientes().
#Deletar direto no banco
protected function deletarClientes($Id)
{
$BFetch=$this->Db=$this->conexaoDB()->prepare("delete from teste where Id=:id");
$BFetch->bindParam(":id",$Id,\PDO::PARAM_INT);
$BFetch->execute();
}
Posteriormente vamos chamar esse método no nosso ControllerCadastro:
#Deletar dados do DB
public function deletar()
{
$this->recVariaveis();
foreach($this->Id as $IdDeletar)
{
$this->deletarClientes($IdDeletar);
}
}
Alguns ajustes
Precisamos fazer alguns ajustes da última aula para que o deletar funcione corretamente. O primeiro é fazer um if no construct para que ele não renderize a página toda hora. Deve ser feito um if assim:
use \Src\Traits\TraitUrlParser;
public function __construct()
{
if(count($this->parseUrl())==1)
{
$Render=new ClassRender();
$Render->setTitle("Cadastro");
$Render->setDescription("Faça seu cadastro.");
$Render->setKeywords("cadastro de clientes, cadastro");
$Render->setDir("cadastro");
$Render->renderLayout();
}
}
Com o if acima ele só vai chamar nosso layout a primeira vez que acessarmos a url cadastro.
Precisamos também que o Array do método selecionaClientes criado na última aula retorne a Id também. Assim:
$Array[$I]=['Id'=>$Fetch['Id'],'Nome'=>$Fetch['Nome'],'Sexo'=>$Fetch['Sexo'],'Cidade'=>$Fetch['Cidade']];
No nosso ControllerCadastro precisamos criar o atributo Id e recebê-lo no método recVariaveis().
#Receber variáveis
private function recVariaveis()
{
if(isset($_POST['Id'])){ $this->Id=$_POST['Id']; }
if(isset($_POST['Nome'])){ $this->Nome=filter_input(INPUT_POST, 'Nome', FILTER_SANITIZE_SPECIAL_CHARS); }
if(isset($_POST['Sexo'])){ $this->Sexo=filter_input(INPUT_POST, 'Sexo', FILTER_SANITIZE_SPECIAL_CHARS); }
if(isset($_POST['Cidade'])){ $this->Cidade=filter_input(INPUT_POST, 'Cidade', FILTER_SANITIZE_SPECIAL_CHARS); }
}
Dessa forma faremos a seleção sem refresh de página e podemos deletar um ou mais dados.