lin3s/wp-symfony-form

WordPress 插件,允许轻松使用 Symfony 表单组件

安装次数: 1,056

依赖者: 0

建议者: 1

安全性: 0

星标: 0

关注者: 4

分支: 1

开放问题: 2

类型:wordpress-plugin

v0.4.1 2016-07-22 09:17 UTC

README

#WP Symfony Form

WordPress 插件,允许轻松使用 Symfony 表单组件

SensioLabsInsight Build Status Scrutinizer Code Quality Total Downloads      Latest Stable Version Latest Unstable Version

安装

如果你使用 composer,请运行以下命令

$ composer require lin3s/wp-symfony-form

如果你的 composer.json 设置正确,你应该能在插件文件夹中找到此包

使用方法

首先,在 WordPress 管理面板中 启用此插件

要创建你的第一个表单,通常从 Symfony 组件提供的 AbstractType 类扩展。

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints;

class ContactType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'constraints' => new Constraints\NotBlank(),
                'label'       => 'Name',
            ])
            ->add('surname', TextType::class, [
                'constraints' => new Constraints\NotBlank(),
                'label'       => 'Surname',
            ])
            ->add('phone', TextType::class, [
                'constraints' => new Constraints\NotBlank(),
                'label'       => 'Phone',
            ])
            ->add('email', EmailType::class, [
                'constraints' => new Constraints\Email(),
                'label'       => 'Email',
            ])
            ->add('message', TextareaType::class, [
                'constraints' => new Constraints\NotBlank(),
                'label'       => 'Message',
            ])
            ->add('conditions', CheckboxType::class, [
                'mapped' => false,
            ]);
    }
}

为了为该表单启用 Ajax 调用,你需要订阅 wp_symfony_form_wrappers WordPress 钩子。

add_filter('wp_symfony_form_wrappers', function($formWrappers) {
    $formWrappers->add(
        new FormWrapper(
            'contact',
            'Fully/Qualified/Namespace/ContactType'
        )
    );
});

###渲染表单 如果你想使用 Twig 来渲染,提供了一个桥梁,只需运行以下代码行,传递 Twig 实例

TwigBridge::addExtension($twig);

// if you want to customize the form theme
TwigBridge::addExtension($twig, 'component/form.twig');

component/form.twig 是你自定义的表单主题,它将用于渲染表单。有关更多信息,请参阅表单定制

Timber 如果你使用 Timber,你应该使用 twig_apply_filters 钩子。
此外,你还需要在 Timber 全局位置变量中加载表单基本视图。

\Timber\Timber::$locations = [
    (...)
    ABSPATH . '../vendor/symfony/twig-bridge/Resources/views/Form/',
];

重要 提交事件绑定到具有 .form 类的每个元素。如果你需要更改它,请执行以下操作

WPSymfonyForm.formSelector = '.your-selector';

此外,每个表单项的错误容器也可以使用 WPSymfonyForm.formErrorsSelector 进行更改。

###FormWrapper FormWrapper 是一个设计来包含一个表单及其所有相关操作的类。如上所述,为你在 WordPress 项目中想要使用的每个表单创建一个新实例,并需要在 FormWrapperRegistry 中注册。

它接受完全限定的命名空间作为第一个参数,接受实现 Action 接口的类数组作为第二个参数。

### 成功时的操作 如果您需要执行任何 服务器端 操作,实现 Action 接口的 execute 方法就像一样简单。可以按照需要使用表单实例。检查 src/Action 文件夹以查看已实现的操作。

要将此操作绑定到特定表单,您需要在 FormWrapper 中添加它。

对于 客户端 成功操作,您可以使用全局 WPSymfonyForm 命名空间添加您的回调,如下所示

    WPSymfonyForm.onSuccess(function ($form) {
      if ($form.hasClass('form--contact')) {
        // ANYTHING YOU WANT TO DO 
      }
      $form.find('.form__footer').html('<p>Form successfully submitted</p>');
    });

onSuccess()onError() 可用于将钩子添加到表单。