sábado, 24 de mayo de 2025

CRUD en CodeIgniter 4

app\Models\ContactoModel.php

<?php

namespace App\Models;

use CodeIgniter\Model;

class ContactoModel extends Model
{
    protected $table = 'contactos';
    protected $primaryKey = 'id';
    protected $allowedFields = ['nombre', 'apellidos', 'celular'];
}

app\Controllers\Contacto.php

<?php
namespace App\Controllers;

use App\Models\ContactoModel;

class Contacto extends BaseController
{
    public function index()
    {
        return view('menu');
    }

    public function listar()
    {
        $modelo = new ContactoModel();
        $data['contactos'] = $modelo->findAll();
        return view('contacto/listar', $data);
    }

    public function crear()
    {
        return view('contacto/crear');
    }

    public function guardar()
    {
        $modelo = new ContactoModel();
        $data = [
            'nombre' => $this->request->getPost('nombre'),
            'apellidos' => $this->request->getPost('apellidos'),
            'celular' => $this->request->getPost('celular'),
        ];
        $modelo->insert($data);
        return redirect()->to(MI_BASE_URL.'listar');
    }

    public function editar($id)
    {
        $modelo = new ContactoModel();
        $data['contacto'] = $modelo->find($id);
        return view('contacto/editar', $data);
    }

    public function actualizar($id)
    {
        $modelo = new ContactoModel();
        $data = [
            'nombre' => $this->request->getPost('nombre'),
            'apellidos' => $this->request->getPost('apellidos'),
            'celular' => $this->request->getPost('celular'),
        ];
        $modelo->update($id, $data);
        return redirect()->to(MI_BASE_URL.'listar');
    }

    public function eliminar($id)
    {
        $modelo = new ContactoModel();
        $modelo->delete($id);
        return redirect()->to(MI_BASE_URL.'listar');
    }

}

app\Views\menu.php

<h1>Menú de Contactos</h1>

<ul>
    <li><a href="<?= MI_BASE_URL.'listar' ?> ">Listar Contactos</a></li>
    <li><a href="<?= MI_BASE_URL.'crear' ?> ">Crear Contacto</a></li>
</ul>

app\Views\contacto\crear.php

<h1>Crear Contacto</h1>

<form action="<?= MI_BASE_URL.'guardar' ?>" method="post">
    <label for="nombre">Nombre:</label>
    <input type="text" id="nombre" name="nombre"><br><br>
    <label for="apellidos">Apellido:</label>
    <input type="text" id="apellidos" name="apellidos"><br><br>
    <label for="celular">Celular:</label>
    <input type="text" id="celular" name="celular"><br><br>
    <input type="submit" value="Crear">
</form>

app\Views\contacto\editar.php

<h1>Editar Contacto</h1>

<form action="<?= MI_BASE_URL.'actualizar/'.$contacto['id'] ?>" method="post">
    <label for="nombre">Nombre:</label>
    <input type="text" id="nombre" name="nombre" value="<?= $contacto['nombre'] ?>"><br><br>
    <label for="apellidos">Apellido:</label>
    <input type="text" id="apellidos" name="apellidos" value="<?= $contacto['apellidos'] ?>"><br><br>
    <label for="celular">Celular:</label>
    <input type="text" id="celular" name="celular" value="<?= $contacto['celular'] ?>"><br><br>
    <input type="submit" value="Actualizar">
</form>

app\Views\contacto\listar.php

<h1>Listado de Contactos</h1>

<table>
    <tr>
        <th>Nombre</th>
        <th>Apellido</th>
        <th>Celular</th>
        <th>Acciones</th>
    </tr>
    <?php foreach ($contactos as $contacto) : ?>
    <tr>
        <td><?= $contacto['nombre'] ?></td>
        <td><?= $contacto['apellidos'] ?></td>
        <td><?= $contacto['celular'] ?></td>
        <td>
            <a href="<?= MI_BASE_URL.'editar/'.$contacto['id'] ?>">Editar</a>
            <a href="<?= MI_BASE_URL.'eliminar/'.$contacto['id'] ?>">Eliminar</a>
        </td>
    </tr>
    <?php endforeach ?>
</table>

app\Config\Routes.php

<?php

use CodeIgniter\Router\RouteCollection;

/**
 * @var RouteCollection $routes
 */
$routes->get('/', 'Contacto::index');
$routes->get('/listar', 'Contacto::listar');
$routes->get('/crear', 'Contacto::crear');
$routes->post('/guardar', 'Contacto::guardar');
$routes->get('/editar/(:num)', 'Contacto::editar/$1');
$routes->post('/actualizar/(:num)', 'Contacto::actualizar/$1');
$routes->get('/eliminar/(:num)', 'Contacto::eliminar/$1');

No hay comentarios.:

Publicar un comentario