PHP code example of oswa / formify-php

1. Go to this page and download the library: Download oswa/formify-php library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

oswa / formify-php example snippets


use Oswa\FormifyPhp\FormifyPhp;

// Crear un nuevo formulario
$form = new FormifyPhp('POST', '/submit');

// Agregar campos
$form->addField('text', 'name', [
    'label' => 'Nombre',
    'essage', [
    'label' => 'Mensaje',
    'rows' => 5
]);

// Agregar botón de submit
$form->submitButton([
    'text' => 'Enviar',
    'class' => 'btn btn-primary'
]);

// O simplemente con string
$form->submitButton('Enviar');

// Renderizar el formulario
echo $form->render();

$form = new FormifyPhp('POST', '/submit');

// Personalizar el renderizado de labels para todos los campos
$form->setRenderLabel(function ($field) {
    return sprintf(
        '<label for="%s" class="font-bold text-blue-600">%s%s</label>',
        $field['name'],
        $field['label'],
        $field['

$form = new FormifyPhp('POST', '/submit');

// Campo con diseño personalizado (input dentro del label)
$form->addField('email', 'email', [
    'label' => 'Correo Electrónico',
    'placeholder' => '[email protected]',
    '="%s" name="%s" class="mt-1 block w-full" />' .
            '</label>' .
            '</div>',
            htmlspecialchars($field['options']['label']),
            $field['type'],
            $field['name']
        );
    }
]);

$form->setFieldWrapper(function ($field) {
    $html = '<div class="mb-6">' . PHP_EOL;
    $html .= $field['label'];
    $html .= $field['input'];
    
    // 'error' es el mensaje en crudo; 'errorHtml' ya viene pasado por setRenderErrors()
    if ($field['error']) {
        $html .= sprintf('<p class="text-red-500 text-sm mt-1">%s</p>', $field['error']);
    }
    
    $html .= '</div>' . PHP_EOL;
    return $html;
});

$form = new FormifyPhp('POST', '/submit');

$form->setAttributes(['class' => 'space-y-6']);

$form->setRenderLabel(function ($field) {
    return sprintf(
        '<label for="%s" class="block text-sm font-medium text-gray-700 mb-2">%s%s</label>',
        $field['name'],
        $field['label'],
        $field['l',
    '    '</label>',
            $field['options']['label'],
            $field['name'],
            $field['options']['class']
        );
    }
]);

// Submit button con custom renderer
$form->submitButton([
    'text' => 'Enviar',
    'class' => 'w-full bg-indigo-600 text-white rounded-lg px-6 py-3',
    'customRenderer' => function ($field) {
        return sprintf(
            '<button type="submit" class="%s hover:bg-indigo-700">' .
            '<span>%s</span>' .
            '</button>',
            $field['options']['class'] ?? '',
            $field['text']
        );
    }
]);

echo $form->render();

$form = new FormifyPhp('POST', '/submit');
$form->addField('email', 'email', ['label' => 'Email']);

// Establecer errores de validación
$form->setErrors([
    'email' => 'El email no es válido'
]);

echo $form->render();

$form->addField('number', 'edad', [
    'label' => 'Edad',
    'min'   => 18,
    'max'   => 99,
    'step'  => 1,
]);

$form->addField('text', 'sku', [
    'label'      => 'SKU',
    'attributes' => ['data-role' => 'sku', 'aria-describedby' => 'sku-help'],
]);

// Checkbox suelto: envía value (por defecto "1") cuando está marcado
$form->addField('checkbox', 'terms', [
    'label'   => 'Acepto los términos',
    'checked' => true,
    'rules'   => ['accepted'],
]);

// Grupo de checkboxes: envía interests[] como array
$form->addField('checkbox', 'interests', [
    'label'   => 'Temas',
    'choices' => ['forms' => 'Formularios', 'validation' => 'Validación'],
    'value'   => ['forms'],          // marcados
    'rules'   => ['

$form->addField('select', 'paises', [
    'label'    => 'Países',
    'multiple' => true,
    'choices'  => ['pe' => 'Perú', 'mx' => 'México'],
    'value'    => ['mx'],
]);

$form->addField('file', 'adjuntos', [
    'label'    => 'Adjuntos',
    'accept'   => '.pdf,.png',
    'multiple' => true,
]);

$form->addField('text', 'name', [
    'label'    => 'Nombre',
    'rules'    => ['if ($form->validate($form->request()->getPost())) {
    // datos válidos
}

$form->getErrors(); // ['name' => 'El nombre debe tener al menos 3 caracteres.']

use Oswa\FormifyPhp\Validation\Validator;

$validator = Validator::make($data, [
    'name'        => '    => 'nullable|integer|between:18,120',
    'items.*.sku' => '   // MessageBag
$validator->errors()->first('email');
$validator->validated();       // solo los campos con reglas que pasaron
$validator->validate();        // devuelve los datos validados o lanza ValidationException

// Con un closure, igual que en Laravel
$validator = Validator::make($data, [
    'sku' => [function (string $attribute, mixed $value, Closure $fail) {
        if (!str_starts_with($value, 'SKU-')) {
            $fail('El campo :attribute debe empezar por SKU-.');
        }
    }],
]);

// O registrando una regla reutilizable
$validator->extend('par', fn($attribute, $value) => $value % 2 === 0, 'El campo :attribute debe ser par.');

use Oswa\FormifyPhp\Validation\Translator;

// Cambiar el idioma de todo el formulario
$form->setLocale('es');

// O directamente sobre el validador
$validator = Validator::make($data, $rules, [], [], new Translator('es'));

// Registrar o sobrescribir mensajes de cualquier idioma
$translator = new Translator('fr');
$translator->addMessages('fr', [
    'validation' => [
        '

session_start(); // o deja que la librería la inicie al renderizar

$form = new FormifyPhp('POST', '/submit');
$form->addField('email', 'email', ['label' => 'Email', 'rules' => ['do');
    }

    if ($form->validate($form->request()->getPost())) {
        // Datos válidos: guardar, enviar email, redirigir...
    }
}

echo $form->render(); // el <input type="hidden" name="csrf_token"> ya viene incluido

$form->disableCsrf();                        // desactivar la protección
$form->antiCsrf()->setTokenName('_token');   // cambiar el nombre del campo
$form->antiCsrf()->regenerateToken();        // forzar un token nuevo

use Oswa\FormifyPhp\Http\Request;

$form->setRequest(new Request('POST', ['email' => '[email protected]']));

$form->isSubmitted();               // true
$form->request()->getPost('email'); // '[email protected]'
bash
composer