alessandrodesign/formbuilder

Interface de criação de formulário com token CSRF

1.0.2 2024-09-22 16:33 UTC

This package is auto-updated.

Last update: 2024-10-23 11:09:25 UTC


README

Latest Stable Version License Total Downloads PHP Version Composer Support Last Commit Code Quality Open Issues

FormBuilder é uma interface poderosa e flexível para criação de formulários HTML no PHP, com suporte para tokens CSRF e várias opções de personalização. Este pacote visa facilitar a construção de formulários seguros e escaláveis para desenvolvedores PHP.

Requisitos

  • PHP >= 8.3
  • Composer

Instalação

Para instalar o pacote, utilize o Composer:

composer require alessandrodesign/formbuilder

Exemplos de Uso

Criação de Formulário

Você pode criar instâncias de formulário de duas maneiras: diretamente pela classe ou utilizando o método estático create.

Instância Tradicional

<?php

use AlessandroDesign\FormBuilder\Enums\EnctypeEnum;
use AlessandroDesign\FormBuilder\Enums\MethodEnum;
use AlessandroDesign\FormBuilder\Form;

require './vendor/autoload.php';

$form = new Form(
    'formTeste',
    MethodEnum::POST,
    'https://localhost:8080/post',
    EnctypeEnum::MultipartFormData
);

Instância com Método Estático

<?php

use AlessandroDesign\FormBuilder\Enums\EnctypeEnum;
use AlessandroDesign\FormBuilder\Enums\MethodEnum;
use AlessandroDesign\FormBuilder\Form;

require './vendor/autoload.php';

$form = Form::create(
    'formTeste',
    MethodEnum::POST,
    'https://localhost:8080/post',
    EnctypeEnum::MultipartFormData
);

Renderização do Formulário

Você pode renderizar o formulário diretamente usando o método render ou utilizando o método mágico __toString().

Método render

<?php

require './vendor/autoload.php';

echo $form->render();

Método __toString()

<?php

require './vendor/autoload.php';

echo $form;

Estrutura do Formulário

Abaixo está um exemplo completo de como estruturar um formulário com diferentes tipos de campos.

<?php

use AlessandroDesign\FormBuilder\Form;

require './vendor/autoload.php';

try {
    $form = Form::create(
        'formTeste',
        MethodEnum::POST,
        'https://localhost:8080/post',
        EnctypeEnum::MultipartFormData
    )->setClass('row g-3');

    // Adiciona campos de texto, radio, checkbox e arquivos
    $form->inputText('Nome', 'nome', placeholder: 'Digite seu nome')
        ->addClassElement('form-control')
        ->addParent('col-md-6', 'input-group');

    $form->inputRadio('Gênero', 'genero', options: ['Masculino', 'Feminino'])
        ->addClassElement('form-check-input')
        ->addParent('col-md-6', 'input-group');

    $form->inputCheckbox('Preferências', 'preferencias', options: ['Opção 1', 'Opção 2'])
        ->addClassElement('form-check-input')
        ->addParent('col-md-6', 'input-group');

    $form->inputFile('Anexar Arquivo', 'anexo')
        ->addClassElement('form-control')
        ->addParent('col-md-12', 'input-group');

    echo $form->render();
} catch (DOMException $e) {
    echo $e->getMessage();
}

Uso de Select

O campo select suporta a adição de opções com ou sem grupos.

<?php

use AlessandroDesign\FormBuilder\Form;

$form = Form::create(
    'formSelect',
    MethodEnum::POST,
    'https://localhost:8080/post'
);

$form->select('Escolha uma opção', 'opcao')
    ->addOptions([
        'Grupo 1' => ['valor1' => 'Opção 1', 'valor2' => 'Opção 2'],
        'Grupo 2' => ['valor3' => 'Opção 3', 'valor4' => 'Opção 4']
    ])
    ->addClassElement('form-select')
    ->addParent('col-md-12');

echo $form->render();

Uso de Botões

Adicione botões de envio ao final do formulário.

<?php

$form->button('Enviar', 'submit', 'btn btn-primary', 'Enviar');
echo $form->render();

Segurança com Token CSRF

O FormBuilder inclui suporte para proteção CSRF. Para ativar essa funcionalidade, use o método useToken().

Definindo Token

$form->useToken();

Validação de Token

if (Form::validateToken()) {
    echo 'Token válido';
} else {
    throw new Exception('Token inválido');
}

Contribuição

Contribuições são bem-vindas! Por favor, sinta-se à vontade para enviar Pull Requests ou abrir Issues no GitHub.

Licença

Este projeto é licenciado sob a MIT License.