Cómo Crear un Registro con Laravel y Livewire 3: Formulario Dinámico, Validaciones y Select desde Base de Datos

Cómo Crear un Registro con Laravel y Livewire 3: Formulario Dinámico, Validaciones y Select desde Base de Datos

Cómo Crear un Registro con Laravel y Livewire 3

En este tutorial aprenderás paso a paso cómo crear un formulario profesional en Laravel Livewire para registrar nuevos transportistas. Trabajaremos completamente sin JavaScript, aprovechando el poder reactivo de Livewire con validaciones en tiempo real y un código limpio y escalable.

  • 📝 Creación del formulario con Livewire
  • ✔ Validaciones automáticas
  • 💾 Registro de datos en la base de datos
  • 🔄 Estados reactivos y controlados
  • ⚡ Actualización sin recargar la página

Este artículo forma parte de un CRUD completo construido con Laravel + Livewire. En la parte anterior desarrollamos la lista tipo DataTable. Hoy avanzamos con la sección de crear (Create).


📌 1. ¿Por qué crear formularios con Livewire?

Livewire permite construir interfaces modernas sin escribir JavaScript. Algunas ventajas:

  • ✔ Validaciones instantáneas
  • ✔ Menos código, mayor productividad
  • ✔ Integración perfecta con Eloquent
  • ✔ Diseño totalmente personalizable con TailwindCSS
  • ✔ Ideal para CRUD profesionales

Con Livewire puedes crear formularios inteligentes que responden al usuario en tiempo real.


📌 2. Estructura del componente Livewire (Create)

A continuación se muestra el componente encargado de registrar transportistas:


<?php

namespace App\Http\Livewire\Admin;

use App\Models\Tipodocumento;
use App\Models\Transportista;
use Livewire\Component;

class TransportistaCreate extends Component
{
    public $tipodocumento_id="";
    public $numdoc;
    public $nomrazonsocial;
    public $address;
    public $nromtc;
    public $predeterminado = 0;
    public $state = 1;
    public $tipodocumentos;

    public function mount()
    {
        $this->tipodocumentos = Tipodocumento::select('id', 'abbreviation')->get();
    }

    protected $rules = [
        'tipodocumento_id' => 'required',
        'numdoc' => 'required|min:8',
        'nomrazonsocial' => 'required',
        'address' => 'required',
        'nromtc' => 'required',
    ];

    public function save()
    {
        $this->validate();

        Transportista::create([
            'tipodocumento_id' => $this->tipodocumento_id,
            'numdoc' => $this->numdoc,
            'nomrazonsocial' => $this->nomrazonsocial,
            'address' => $this->address,
            'nromtc' => $this->nromtc,
            'company_id' => auth()->user()->company_id,
            'predeterminado' => $this->predeterminado,
            'state' => $this->state,
        ]);
    }

    public function render()
    {
        return view('livewire.admin.transportista-create');
    }
}
?>

Este componente gestiona la carga del combo, el formulario, las validaciones y el almacenamiento.


📌 3. Vista del formulario (HTML + Tailwind + Livewire)

La vista contiene los campos del formulario, mensajes de error en tiempo real y un diseño simple pero profesional.


<div class="max-w-3xl p-6 mx-auto bg-white rounded shadow">

    <h2 class="mb-4 text-xl font-semibold text-gray-700">
        Crear Transportista
    </h2>

    <!-- Tipo de Documento -->
    <div class="mb-4">
        <x-jet-label value="Tipo Documento" />
        <select wire:model="tipodocumento_id"
                class="w-full h-10 border-gray-300 rounded-md shadow-sm">
            <option value="" disabled>Seleccione</option>
            @foreach ($tipodocumentos as $tipodocumento)
                <option value="{{ $tipodocumento->id }}">
                    {{ $tipodocumento->abbreviation }}
                </option>
            @endforeach
        </select>
        <x-jet-input-error for="tipodocumento_id" />
    </div>

    <!-- Numero Documento -->
    <div class="mb-4">
        <x-jet-label value="Número Documento" />
        <x-jet-input type="text" wire:model="numdoc" class="w-full"/>
        <x-jet-input-error for="numdoc" />
    </div>

    <!-- Razon Social -->
    <div class="mb-4">
        <x-jet-label value="Razón Social" />
        <x-jet-input type="text" wire:model="nomrazonsocial" class="w-full"/>
        <x-jet-input-error for="nomrazonsocial" />
    </div>

    <!-- Direccion -->
    <div class="mb-4">
        <x-jet-label value="Dirección" />
        <x-jet-input type="text" wire:model="address" class="w-full"/>
        <x-jet-input-error for="address" />
    </div>

    <!-- Nro MTC -->
    <div class="mb-4">
        <x-jet-label value="Nro MTC" />
        <x-jet-input type="text" wire:model="nromtc" class="w-full"/>
        <x-jet-input-error for="nromtc" />
    </div>

    <!-- Boton Guardar -->
    <button wire:click="save"
            class="px-4 py-2 font-semibold text-white bg-green-600 rounded hover:bg-green-700">
        Guardar
    </button>

</div>

Gracias a Livewire, los errores se muestran inmediatamente sin recargar la página.


📌 4. Funciones clave explicadas

Función Descripción
$this->validate() Ejecuta las validaciones definidas en $rules.
wire:model Hace que los campos sean reactivos.
Combo dinámico Carga tipos de documento desde base de datos en mount().
Eloquent::create() Guarda el registro en la BD de manera sencilla.

📌 5. Ventajas de usar Livewire para formularios

  • ✔ Validaciones sin recargar
  • ✔ Campos reactivos
  • ✔ Menos JavaScript, más productividad
  • ✔ Integración directa con los modelos
  • ✔ Perfecto para sistemas administrativos y ERP

🚀 Conclusión

En este artículo aprendiste a crear un formulario completo con Laravel Livewire para registrar transportistas. Ahora tienes un Create funcional con:

  • ✔ Carga de catálogos
  • ✔ Validaciones
  • ✔ Guardado en base de datos
  • ✔ Estados reactivos

En el siguiente artículo implementaremos:

  • 🟡 Edición
  • 🔴 Eliminación con confirmación

De esta forma completaremos el CRUD profesional con Livewire.


📞 Contáctanos

En Ticom Software somos especialistas en Laravel, PHP y Odoo ERP. Ofrecemos desarrollo de aplicaciones web, capacitaciones y soporte técnico.

  • 🔗 Web: https://www.ticomsoftware.com
  • 📧 Email: info@ticomsoftware.com
  • 📱 WhatsApp: +51 996 929 478
  • 🔵 Facebook: https://www.facebook.com/ticomperuscrl/
  • 📸 Instagram: https://www.instagram.com/ticom.peru/
  • 🎵 TikTok: https://www.tiktok.com/@ticomscrl


Etiquetas :
F