带有token CSRF的表单创建界面

1.0.2 2024-09-22 16:33 UTC

This package is auto-updated.

Last update: 2024-09-22 17:37:58 UTC


README

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

FormBuilder是一个强大的、灵活的PHP HTML表单创建界面,支持tokens CSRF和多种自定义选项。此包旨在帮助PHP开发者构建安全、可扩展的表单。

要求

  • PHP >= 8.3
  • Composer

安装

要安装此包,请使用Composer

composer require alessandrodesign/formbuilder

使用示例

创建表单

您可以通过两种方式创建表单实例:直接通过类或使用静态方法create

传统实例

<?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
);

静态方法实例

<?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
);

表单渲染

您可以直接使用render方法或使用魔法方法__toString()来渲染表单。

render方法

<?php

require './vendor/autoload.php';

echo $form->render();

__toString()方法

<?php

require './vendor/autoload.php';

echo $form;

表单结构

下面是一个如何使用不同字段类型构建表单的完整示例。

<?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();
}

使用选择框

选择框字段支持添加带或不带组的选项。

<?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();

使用按钮

将提交按钮添加到表单末尾。

<?php

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

使用Token CSRF进行安全保护

FormBuilder包含对CSRF保护的支持。要启用此功能,请使用方法useToken()

定义Token

$form->useToken();

Token验证

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

贡献

欢迎贡献!请随意发送Pull Requests或在新GitHub中打开问题。

许可

此项目采用MIT许可证