lucasnribeiro/form-forge

PHP的一个小型高效表单库

1.0.1 2024-07-29 18:48 UTC

This package is auto-updated.

Last update: 2024-10-01 00:23:16 UTC


README

Packagist VersionPackagist Dependency Version

FormForge

FormForge是一个基于面向对象的PHP表单构建器。本项目的目标是作为一个如何使用composer自动加载器和PSR-4构建库的例子。这里包含的抽象可以移植到许多其他使用面向对象的项目中。这还不是生产就绪的,它只是一个学习研究。

依赖关系

  • Composer 2.4+
  • PHP 7.0+ 或 8.0+

功能

  • 流畅的API,易于表单创建和定制
  • 支持各种输入类型(文本、电子邮件、选择等)
  • 可定制的标签和提交按钮
  • 表单方法和动作定制
  • 基本验证支持
  • 可扩展的架构

安装

您可以通过Composer安装FormForge

composer require lucasnribeiro/form-forge

类UML图

UML Classes

基本用法

use Lucasnribeiro\FormForge\Form;
use Lucasnribeiro\FormForge\Inputs\InputFactory;

$form = new Form(new InputFactory());

$form->setMethod('post')
     ->setAction('/submit-form')
     ->addField('name', 'text', ['label' => 'Your Name'])
     ->addField('email', 'email', ['label' => 'Your Email'])
     ->addField('country', 'select', [
         'label' => 'Country',
         'options' => ['US' => 'United States', 'CA' => 'Canada', 'UK' => 'United Kingdom']
     ])
     ->submitButton()
         ->setValue('Send')
         ->addClass('btn-primary');

echo $form->render();

定制字段

您可以在添加字段后对其进行定制

$form->addField('email', 'email', ['label' => 'Your Email'])
     ->field('email')
     ->addClass('form-control')
     ->label()
     ->addClass('form-label');

定制提交按钮

$form->submitButton()
     ->setValue('Send Message')
     ->addClass('btn')
     ->addClass('btn-primary')
     ->addAttribute('id', 'contact-submit');

使用Tailwind的示例

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Lucasnribeiro\FormForge\FormBuilder;

$form = FormBuilder::create();
$form->setMethod('post')
     ->setAction('/submit-contact')
     ->addField('name', 'text', ['label' => 'Full Name'])
     ->addField('email', 'email', ['label' => 'Email Address'])
     ->addField('subject', 'text', ['label' => 'Subject'])
     ->addField('message', 'textarea', ['label' => 'Your Message']);

$form->field('name')
     ->addClass('mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50')
     ->label()
     ->addClass('block text-sm font-medium text-gray-700');

$form->field('email')
     ->addClass('mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50')
     ->label()
     ->addClass('block text-sm font-medium text-gray-700');

$form->field('subject')
     ->addClass('mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50')
     ->label()
     ->addClass('block text-sm font-medium text-gray-700');

$form->field('message')
     ->addClass('mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50')
     ->label()
     ->addClass('block text-sm font-medium text-gray-700');

$form->submitButton()
     ->setValue('Send Message')
     ->addClass('mt-4 px-4 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500');

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FormForge</title>
    <script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
     <div class="flex flex-row justify-center mt-10">
          <div class="w-96">
               <?php echo $form->render(); ?>
          </div>
     </div>
</body>
</html>