lin3s / wp-symfony-form
WordPress 插件,允许轻松使用 Symfony 表单组件
Requires
- php: ^5.5 || ^7.0
- symfony/config: ^2.3 || ^3.0
- symfony/finder: ^2.3 || ^3.0
- symfony/form: ^2.8 || ^3.0
- symfony/translation: ^2.3 || ^3.0
- symfony/twig-bridge: ^2.3 || ^3.0
- symfony/validator: ^2.3 || ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.11
- lin3s/wp-phpspec-brigde: ^0.1
- phpspec/phpspec: ^2.5
Suggests
- timber/timber: Required if you want to use the MailerAction
This package is not auto-updated.
Last update: 2024-09-14 18:31:32 UTC
README
#WP Symfony Form
WordPress 插件,允许轻松使用 Symfony 表单组件
安装
如果你使用 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()
可用于将钩子添加到表单。