Skip to content

Estructuración y creación del patrón de arquitectura MVC (Modelo-Vista-Controlador), el cual me he guiado por el framework Laravel. Esto tiene como objetivo aplicar el Backend en un caso real y también comprender la lógica, estructuración y escalabilidad que ofrece.

Notifications You must be signed in to change notification settings

FernandoYZ/project-mvc

Repository files navigation

Proyecto Backend en PHP

Descripción

Este proyecto es un proyecto personal diseñado para ofrecer una estructura modular y escalable tanto para el backend como para el frontend, principalmente enfocándonos por el lado del Servidor. Utiliza una arquitectura basada en el patrón MVC para el backend en PHP similar al framework de Laravel. El objetivo es proporcionar una solución flexible y extensible para el desarrollo de aplicaciones web medianas a grandes.

Estructura del Proyecto

project/
├── app/
│   ├── Http/
│   │   ├── Controllers/
│   │   │   └── Auth/
│   │   │       ├── AuthenticatedSessionController.php
│   │   │       ├── ConfirmablePasswordController.php
│   │   │       ├── EmailVerificationNotificationController.php
│   │   │       ├── EmailVerificationPromtController.php
│   │   │       ├── NewPassword.php
│   │   │       ├── PasswordController.php
│   │   │       ├── PasswordResetLinkController.php
│   │   │       ├── RegisteredUserController.php
│   │   │       └── VerifyEmailController.php
│   │   └── Middleware/
│   │   │   ├── Authenticate.php
│   │   │   └── Guest.php
│   ├── Models/
│   └── helpers.php
├── bootstrap/
│   └── app.php
├── config/
│   ├── app.php
│   └── database.php
├── core/
│   ├── Controller.php
│   ├── Database.php
│   ├── ExceptionHandler.php
│   ├── Middleware.php
│   ├── MiddlewareHandler.php
│   ├── Model.php
│   ├── QueryBuilder.php
│   ├── Request.php
│   ├── Response.php
│   ├── Route.php
│   ├── Router.php
│   ├── Validation.php
│   ├── ViewCompiler.php
│   └── Views.php
├── public/
│   ├── build/assets
│   │   ├── app.css
│   │   └── app.js
│   ├── css/
│   ├── js/
│   ├── .htaccess
│   └── index.php
├── resources/
│   ├── js/
│   ├── css/
│   └── Views/
├── routes/
│   ├── auth.php
│   └── web.php
├── storage/
│   ├── cache/
│   ├── logs/
│   └── uploads/
├── vendor/
│   └── autoload.php
└── .env

Backend

Estructura

  • Controllers: Define la lógica del negocio y maneja las solicitudes.
  • Models: Representa la estructura de los datos y maneja la interacción con la base de datos usando QueryBuilder.
  • Views: Se encargan de la presentación de los datos. Se encuentran en resources/Views.

Uso del Controlador

Los controladores deben estar ubicados en la carpeta /app/Controllers y deben extender BaseController. Aquí hay un ejemplo de un controlador básico:

<?php

namespace App\Controllers;

use App\Models\User;
use Core\Controller;

class UserController extends Controller
{
    /**
     * Mostrar una lista de usuarios.
     *
     * @return void
     */
    public function index()
    {
        $users = User::all();
        return $this->view('users.index', ['users' => $users]);
    }

    /**
     * Mostrar el formulario para crear un nuevo usuario.
     *
     * @return void
     */
    public function create()
    {
        return $this->view('users.create');
    }

    /**
     * Almacenar un nuevo usuario en la base de datos.
     *
     * @return void
     */
    public function store()
    {
        $data = $_POST;
        User::create($data);
        header('Location: /users');
    }
}

Descripción

  • index(): Obtiene todos los usuarios y pasa los datos a la vista users.index.
  • create(): Muestra el formulario para crear un nuevo usuario.
  • store(): Crea un nuevo usuario en la base de datos con los datos enviados a través de POST.

Uso del Modelo

Los modelos representan las entidades en la base de datos y contienen la lógica para interactuar con ella. Utilizan el QueryBuilder para realizar consultas a la base de datos. Además, deben estar ubicados en la carpeta /app/Models y deben extender BaseModel. Aquí hay un ejemplo de un controlador básico:

<?php

namespace App\Models;

use Core\BaseModel;

class User extends BaseModel
{
    protected static $table = 'users';

    /**
     * Obtener todos los usuarios.
     *
     * @return array
     */
    public static function all()
    {
        return self::query()->select('*')->get();
    }

    /**
     * Crear un nuevo usuario.
     *
     * @param array $data
     * @return void
     */
    public static function create(array $data)
    {
        self::query()->insert($data);
    }
}

Descripción

  • all(): Obtiene todos los usuarios y pasa los datos a la vista users.index.
  • create(array $data): Inserta un nuevo registro en la tabla users con los datos proporcionados.

##Notas adicionales

  • Seguridad: Asegúrate de validar y sanitizar los datos recibidos en el backend para evitar inyecciones SQL y otros ataques.
  • SEO: Si el contenido de la aplicación es dinámico, considera usar técnicas como el renderizado del lado del servidor (SSR) o pre-renderizado para mejorar el SEO.
  • Rendimiento: Optimiza las consultas a la base de datos y considera usar técnicas de caching para mejorar el rendimiento de la aplicación.

About

Estructuración y creación del patrón de arquitectura MVC (Modelo-Vista-Controlador), el cual me he guiado por el framework Laravel. Esto tiene como objetivo aplicar el Backend en un caso real y también comprender la lógica, estructuración y escalabilidad que ofrece.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published