symftony/form-handler

一个 Symfony 表单处理器

v1.0.0 2024-02-05 20:35 UTC

This package is not auto-updated.

Last update: 2024-09-16 23:25:55 UTC


README

Symfony 表单处理器抽象

演示

您可以在 演示表单处理器 上尝试这个库

安装

推荐通过 Composer 安装 FormHandler。

# Install Composer
curl -sS https://getcomposer.org/installer | php
php composer require symftony/form-handler

安装后,您需要引入 Composer 的自动加载器

require 'vendor/autoload.php';

文档

此包提供内置的 FormHandler 和 TypeExtension。

TypeExtension 为 Symfony FormType 添加选项

  • handler_invalid = true 抛出 InvalidFormException
  • handler_not_submitted = true 抛出 NotSubmittedFormException
  • handler_transformation_failed = true 抛出 TransformationFailedFormException

如果您在此选项中设置数据而不是 true,则 FormHandler::handle 如果情况合适则返回它

在 Symfony 中使用

将包添加到您的 kernel app/AppKernel.php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            ...
            new Symftony\FormHandler\FormBundle\FormHandlerBundle(),
            ...
        ];
    }
    ...

在控制器中使用内置的 FormHandler

    public function yourAction(Request $request)
    {
        $formHandler = $this->get('form_handler.form_handler.default');
        // Throw exception if the form is NotSubmit/NotValid/TransformFailed
        $form = $formHandler->createForm(TextType::class, 'my-value', 'My default data', [
            'method' => 'GET',
            'handler_invalid' => true,
            'handler_not_submitted' => true,
            'handler_transformation_failed' => true,
        ]);
        // You get the $form->getData() if all succeed
        $result = $formHandler->handleRequest($form, $request);

        return $this->render('default/index.html.twig', [
            'form' => $form->createView(),
            'result' => $result,
        ]);
    }

您可以为处理异常添加 try/catch 或实现一个 KernelException

扩展 FormHandler

创建 YourFormHandler 并扩展 FormHandler

<?php

namespace AppBundle\Form\Handler;

use Symfony\Component\HttpFoundation\Request;
use Symftony\FormHandler\FormHandler;

class YourFormHandler extends FormHandler
{
    public function createFromRequest(Request $request, $notSubmitted = true, $invalid = true)
    {
        $form = $this->createForm(TextType::class, 'my-value', 'My default data', [
            'handler_not_submitted' => $notSubmitted,
            'handler_invalid' => $invalid,
        ]);

        $result = $this->handleRequest($form, $request);

        // DO whatever you want with your $result
        
        return $result
    }
}

声明为服务

services:
    app.form_handler.your:
        class: AppBundle\Form\Handler\YourFormHandler
        tags:
            - { name: 'form.handler' }

/!\ 不要忘记用 'form.handler' 标签或自己注入 FormFactory

使用它!!!

    public function yourAction(Request $request)
    {
        return $this->render('default/index.html.twig', [
            'result' => $this->get('app.form_handler.your')->createFromRequest(
                $request,
                'my data if form wasn\'t post' // result if the form isn't submitted
                true // Gonna throw Exception when the form isn't valid
            ),
        ]);
    }