MVC, MVT e Template Engine - #6 Models
05/06/2020No tutorial de hoje trabalharemos com models. Os models servem para manipular bancos de dados, webservices, dentre outros.
Model no sistema MVC
ConexaoModel.php
Esse model ficará responsável por linkar o nosso projeto ao banco de dados MySQL.
<?php
namespace Models;
abstract class ConexaoModel
{
protected function conectDB()
{
try{
return $con=new \PDO("mysql:host=".DBHOST.";dbname=".DBNAME."",DBUSER,DBPASS);
}catch (\PDOException $error){
return $error->getMessage();
}
}
}
No arquivo config/config.php nós setamos o banco de dados como sistema, então não esqueça de acessar http://localhost/phpmyadmin e criar esse banco de dados.
create database sistema
create table produtos (id int not null auto_increment, primary key(id), name varchar(90), price varchar(30))
Criaremos também um model para os produtos.
ProdutoModel
<?php
namespace Models;
class ProdutoModel extends ConexaoModel
{
public function showAll()
{
$query=$this->conectDB()->prepare("select * from produtos");
$query->execute();
return $data=$query->fetchAll(\PDO::FETCH_OBJ);
}
}
Agora no ProdutoController usaremos o ProdutoModel:
ProdutoModel
<?php
namespace Controllers;
use Jenssegers\Blade\Blade;
use Models\ProdutoModel;
class ProdutoController extends ProdutoModel{
private $blade;
public function __construct()
{
$this->blade=new Blade(DIRREQ.'views',DIRREQ.'lib/cache');
}
#Página index
public function index($url=null,$tipo=null,$marca=null)
{
$data=$this->showAll();
return $this->blade->render('produto',compact('data'));
}
}
views/produto.blade.php
Agora basta exibirmos os resultados na view.
@extends('templates.default')
@section('title','Produtos')
@section('content')
<h1>Meus Produtos</h1>
<table>
<tr>
<td>Nome</td>
<td>Preço</td>
<td>Ação</td>
</tr>
@foreach($data as $produtos)
<tr>
<td>{{$produtos->name}}</td>
<td>{{$produtos->price}}</td>
<td></td>
</tr>
@endforeach
</table>
@endsection
style.css
Agora basta fazermos a estilização dos dados exibidos:
*{margin:0; padding:0; box-sizing: border-box;}
table{width: 80%; margin: 20px auto; text-align: center;}
table tr:first-child{background: #333; color:#fff; font-weight: bold;}
table tr:nth-child(2n){background: #ddd;}
table td{padding: 10px 0;}
table td:nth-child(1){width: 70%;}
table td:nth-child(2){width: 20%;}
table td:nth-child(3){width: 10%;}
templates/default.blade.php
Não esqueça de linkar o css no template default do nosso sistema:
<link rel="stylesheet" href="@php echo DIRPAGE.'lib/css/style.css'; @endphp">
Por hoje é só! Sucesso nos códigos e na vida!