En este momento estás viendo Sistema de Venta en PHP y MYSQL – MVC

Sistema de Venta en PHP y MYSQL – MVC

Compartir en

Este curso constará de varios capítulos como el sistema de Java que se esta desarrollando actualmente, se trabajara los mismo módulos y se aplicará las mismas técnicas.

Plantilla a utilizar.

https://github.com/startbootstrap/startbootstrap-sb-admin

Cuando se comenzó a grabar el curso la platilla se utilizaba la versión 4 de bootstrap.

En los primeros capítulos encontraras el avance compartido, para comenzar con esa versión.

En el capítulo 31 se actualiza la plantilla a la última versión.

Importante en el siguiente capitulo se hace los ajustes de las alertas para no ocupar mucho espacio.

El avance ya viene con los ajustes de las alertas.

El avance contienes 2 módulos: CRUD usuarios y cajas.

Cambiar el nombre de la base de datos(por defecto esta con el nombre pedidos y el tutorial esta sistema).

Paso 01

Lo primero que desarrollaremos será la estructura de nuestro proyecto.

  • Controllers.
  • Models
  • Views.
  • Config-> Nos servirá para hacer las configuraciones.
  • Assets-> Nos servirá para almacenar los estilos, scripts, etc.

Paso 02

Crear el archivo htaccess

Nos servirá para crear urls amigables, hacer restricciones a directorios, etc.

Options All -Indexes
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Crear un archivo config.php dentro del directorio Config.

Aquí configuraremos la base_url de nuestro proyecto, también aquí definiremos los datos de nuestro servidor.

<?php
const base_url = "http://localhost/pos_venta/";
const host = "localhost";
const user = "root";
const pass = "";
const db = "sistema";
const charset = "charset=utf8";
?>

Creación de URL amigables con la ayuda del archivo htaccess

Este será el index principal, donde configuraremos los controladores, métodos y parámetros.

Ejemplo:

<?php
    $ruta = !empty($_GET['url']) ? $_GET['url'] : "Home/index";
    $array = explode("/", $ruta);
    $controller = $array[0];
    $metodo = "index";
    $parametro = "";
    if (!empty($array[1])) {
        if (!empty($array[1] != "")) {
            $metodo = $array[1];
        }
    }
    if (!empty($array[2])) {
        if (!empty($array[2] != "")) {
            for ($i=2; $i < count($array); $i++) { 
                $parametro .= $array[$i]. ",";
            }
            $parametro = trim($parametro, ",");
        }
    }
?>

Creación del archivo Autoload.php

Dentro del directorio App creáremos un nuevo archivo con el nombre autoload.php, esta no servirá para cargar las clases de forma automática.

<?php
spl_autoload_register(function($class){
    if (file_exists("Config/App/".$class.".php")) {
        require_once "Config/App/" . $class . ".php";
    }
})
?>

Este archivo lo vamos requerir en el index principal, después de definir los parámetros.

require_once 'Config/App/autoload.php';

Ruta de los controladores

Vamos hacer algunas validaciones para indicarle la ruta donde se encuentran los controladores, luego hacer la instancia de la clase.

$dirControllers = "Controllers/" . $controller . ".php";
if (file_exists($dirControllers)) {
    require_once $dirControllers;
    $controller = new $controller();
    if (method_exists($controller, $metodo)) {
        $controller->$metodo($parametro);
    } else {
        echo 'No existe el metodo';
    }
} else {
    echo 'No existe el controlador';
}

Resultado final del archivo index principal quedaría de esta manera.

<?php
require_once 'Config/Config.php';
$ruta = !empty($_GET['url']) ? $_GET['url'] : "Home/index";
$array = explode("/", $ruta);
$controller = $array[0];
$metodo = "index";
$parametro = "";
if (!empty($array[1])) {
    if (!empty($array[1] != "")) {
        $metodo = $array[1];
    }
}
if (!empty($array[2])) {
    if (!empty($array[2] != "")) {
        for ($i = 2; $i < count($array); $i++) {
            $parametro .= $array[$i] . ",";
        }
        $parametro = trim($parametro, ",");
    }
}
require_once 'Config/App/autoload.php';
$dirControllers = "Controllers/" . $controller . ".php";
if (file_exists($dirControllers)) {
    require_once $dirControllers;
    $controller = new $controller();
    if (method_exists($controller, $metodo)) {
        $controller->$metodo($parametro);
    } else {
        echo 'No existe el metodo';
    }
} else {
    echo 'No existe el controlador';
}
?>

Comunicación Controller y Model

Crear un nuevo archivo dentro del directorio Config/App/, con el nombre Controller.php

<?php
class Controller{
    public function __construct()
    {
        $this->views = new Views();
        $this->cargarModel();
    }
    public function cargarModel()
    {
        $model = get_class($this)."Model";
        $ruta = "Models/".$model.".php";
        if (file_exists($ruta)) {
            require_once $ruta;
            $this->model = new $model();
        }
    }
}

?>

Comunicación Controller con Views

Crear un archivo dentro de Config/App/ con nombre Views.php

<?php
class Views{

    public function getView($controlador, $vista, $data="")
    {
        $controlador = get_class($controlador);
        if ($controlador == "Home") {
            $vista = "Views/".$vista.".php";
        }else{
            $vista = "Views/".$controlador."/".$vista.".php";
        }
        require $vista;
    }
}


?>

Conexión a la base de datos

Vamos a crear nuestra base de datos luego le indicamos el nombre en el archivo config que se muestra al comienzo.

Ejemplo: sistema.

luego hacer la conexión apuntando a esa base de dato con los datos necesarios del servidor.

En nuestra clase Conexion haremos uso de nuestro constantes.

Ejemplo:

<?php
class Conexion{
    private $conect;
    public function __construct()
    {
        $pdo = "mysql:host=".host.";dbname=".db.";.charset.";
        try {
            $this->conect = new PDO($pdo, user, pass);
            $this->conect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo "Error en la conexion".$e->getMessage();
        }
    }
    public function conect()
    {
        return $this->conect;
    }
}

?>

Creación de métodos para Insertar, Actualizar y Consultar.

Crearemos unos métodos dentro Config/App/ un archivo Query.php que nos ayudará en la construcción de nuestro sistema.

<?php
class Query extends Conexion{
    private $pdo, $con, $sql, $datos;
    public function __construct() {
        $this->pdo = new Conexion();
        $this->con = $this->pdo->conect();
    }
    public function select(string $sql)
    {
        $this->sql = $sql;
        $resul = $this->con->prepare($this->sql);
        $resul->execute();
        $data = $resul->fetch(PDO::FETCH_ASSOC);
        return $data;
    }
    public function selectAll(string $sql)
    {
        $this->sql = $sql;
        $resul = $this->con->prepare($this->sql);
        $resul->execute();
        $data = $resul->fetchAll(PDO::FETCH_ASSOC);
        return $data;
    }
    public function save(string $sql, array $datos)
    {
        $this->sql = $sql;
        $this->datos = $datos;
        $insert = $this->con->prepare($this->sql);
        $data = $insert->execute($this->datos);
        if ($data) {
            $res = 1;
        }else{
            $res = 0;
        }
        return $res;
    }
}


?>

nombre de la base de datos(por defecto esta con el nombre pedidos y el tutorial esta sistema).

Código para Descomprimir ZIP

5 3 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments