c975l / contactform-bundle
管理简单联系表单的包
Requires
- dev-main
- v7.4
- v7.3
- v7.2
- v7.1
- v7.0.3
- v7.0.2
- v7.0.1
- v7.0
- 6.x-dev
- v6.0.2
- v6.0.1
- v6.0
- 5.x-dev
- v5.0.1
- v5.0
- 4.x-dev
- v4.0.1
- v4.0
- 3.x-dev
- v3.4.1
- v3.4
- v3.3.1
- v3.3
- v3.2
- v3.1.2.1
- v3.1.2
- v3.1.1
- v3.1
- v3.0.1
- v3.0
- 2.x-dev
- v2.0.8.2
- v2.0.8.1
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0
- 1.x-dev
- v1.10.5
- v1.10.4.5
- v1.10.4.4
- v1.10.4.3
- v1.10.4.2
- v1.10.4.1
- v1.10.4
- v1.10.3
- v1.10.2.2
- v1.10.2.1
- v1.10.2
- v1.10.1.2
- v1.10.1.1
- v1.10.1
- v1.10
- v1.9.5.1
- v1.9.5
- v1.9.4
- v1.9.3
- v1.9.2
- v1.9.1
- v1.9
- v1.8.3
- v1.8.2.1
- v1.8.2
- v1.8.1
- v1.8
- v1.7.1
- v1.7
- v1.6.2
- v1.6.1.1
- v1.6.1
- v1.6
- v1.5.4
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5
- v1.4
- v1.3
- v1.2.1
- v1.2
- v1.1.1
- v1.1
- v1.0
- dev-dev
This package is auto-updated.
Last update: 2024-09-15 16:20:42 UTC
README
ContactFormBundle可以执行以下操作
- 显示一个联系网站的表单,
- 如果用户已登录,则预填数据,
- 派发事件以修改表单/电子邮件,
- 通过c975LEmailBundle发送电子邮件,作为
c975LEmailBundle
提供将电子邮件保存到数据库的可能性,此包有一个选项可以通过此包不这样做, - 将副本发送到提供的电子邮件,
- 允许将电子邮件发送给其他用户,相关于您的应用规范,即联系另一个用户而无需提供其电子邮件。这是通过事件派发(见下文)实现的,
- 提供蜜罐和提交前的延迟,以防止垃圾邮件且无需请求验证码(见下文),
包安装
步骤 1: 下载包
v5.x 与 Symfony 6.x 兼容。 使用 v3|4.x 用于 Symfony 4.x 使用 v2.x 用于 Symfony 3.x 使用 Composer 安装库
composer require c975l/contactform-bundle
步骤 2: 配置包
检查依赖项以进行其配置
c975LContactFormBundle使用c975L/ConfigBundle来管理配置参数。使用路由"/contact/config"以及适当的用户角色来修改它们。
步骤 3: 声明Twig\Extensions\TextExtension
您必须在您的/config/pacakes/twig_extensions.yaml
中允许Twig\Extensions\TextExtension
。
步骤 4: 启用路由
然后,通过将它们添加到您的项目的/config/routes.yaml
文件中,启用路由。
c975_l_contact_form: resource: "@c975LContactFormBundle/Controller/" type: annotation prefix: / #Multilingual website use the following #prefix: /{_locale} #defaults: { _locale: '%locale%' } #requirements: # _locale: en|fr|es
步骤 5: 覆盖模板
强烈建议使用从第三方包覆盖模板的功能来与您的站点完全集成。
为此,只需在您的应用程序中创建以下结构 /templates/bundles/c975LContactFormBundle/
,然后复制其中的layout.html.twig
文件,以覆盖现有的包文件。
在layout.html.twig
中,它将主要扩展您的布局并定义特定的变量,例如
{% extends 'layout.html.twig' %} {# Defines specific variables #} {% set title = 'Contact' %} {% block content %} {% block contactform_content %} {% endblock %} {% endblock %}
用于发送电子邮件的模板是c975LEmailBundle的模板。在/templates/c975LEmailBundle/emails/layout.html.twig
中覆盖它。
如何使用
路由名称是contactform_display
,因此您可以通过{{ path('contactform_display') }}
在Twig中添加链接。
URL路径是/contact
或/{_locale}/contact
,因此只需访问http://example.com/contact
或http://example.com/en/contact
来显示表单。
您可以使用URL参数s
设置主题,例如http://example.com/contact?s=Subject
,该字段将在表单中只读,但当然,它可以通过URL进行更改。该值将被清理并作为(subject
)传递给表单,以便能够根据此值更改标题和/或信息文本,例如
{% if 'Subject' in subject %} {# Do some stuff #} {% endif %}
蜜罐和延迟以防止垃圾邮件
为了避免ContactFormBundle作为发送垃圾邮件的入口点,字段username
是一个蜜罐。它仅对机器人显示,并通过CSS对正常用户隐藏。如果它被填写,则不是用户,而是机器人。还有一个用于提交表单的延迟的测试。如果表单在定义的延迟之前提交,则可能不是由人类填写。
对于这两种情况,ContactFormBundle 将会像邮件已发送一样操作,但实际上并不是这样。
更改 infoText
您可以通过以下代码在您的覆盖模板 /templates/c975LContactFormBundle/layout.html.twig
中更改在联系表单顶部显示的文本。
{% extends 'layout.html.twig' %} {% set infoText = 'text.contact_info'|trans({'%site%': site}, 'contactForm') %} {% if YOUR_CONDITION_IS_MET %} {% set infoText = 'YOUR_TEXT_TO_DISPLAY' %} {% endif %} {% block content %} {% block contactform_content %} {% endblock %} {% endblock %}
事件分发
禁用“接收副本”复选框
您可以通过捕获以下代码中的 CREATE_FORM
事件来禁用复选框,允许用户接收发送的电子邮件副本。这在例如,如果联系表单用于联系另一个用户,并且您想保留其电子邮件地址时非常有用。
namespace AppBundle\EventSubscriber; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use c975L\ContactFormBundle\Event\ContactFormEvent; class ContactFormSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return array( ContactFormEvent::CREATE_FORM => 'createForm', ); } public function createForm($event) { //Gets data $formData = $event->getFormData(); $subject = $formData->getSubject(); //For example, you can check if a string is present in the subject if (stripos($subject, 'THE_STRING_YOU_WANT_TO_MATCH_IN_THE_SUBJECT') === 0) { $event->setReceiveCopy(false); } } }
在发送的电子邮件中设置特定数据
根据您的应用规格,您可以根据表单发送的数据(正文、主题等)设置特定的电子邮件数据。为此,您需要创建以下代码的监听器。
namespace AppBundle\EventSubscriber; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use c975L\ContactFormBundle\Event\ContactFormEvent; class ContactFormSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return array( ContactFormEvent::SEND_FORM => 'sendForm', ); } public function sendForm($event) { //Gets data $formData = $event->getFormData(); $subject = $formData->getSubject(); //For example, you can check if a string is present in the subject if (stripos($subject, 'THE_STRING_YOU_WANT_TO_MATCH_IN_THE_SUBJECT') === 0) { //Do the stuff... //Conditions to send email are met if (1 == 1) { //Defines data for email $bodyEmail = 'YOUR_EMAIL_TEMPLATE.html.twig'; $bodyData = array( //Any needed data for your template ); //The following array keys are mandatory, but you can set the other keys defined in c975L\EmailBundle $emailData = array( 'subject' => 'YOUR_EMAIL_SUBJECT', 'bodyData' => $bodyData, 'bodyEmail' => $bodyEmail, ); //Updates event $event->setEmailData($emailData); //Stop sending by setting an error code, it will create a flash including your error code } else { $event->setError('YOUR_ERROR_CODE'); } } } }
更新重定向 URL
您可以使用以下代码更新提交表单后要重定向到的 URL。
namespace AppBundle\EventSubscriber; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use c975L\ContactFormBundle\Event\ContactFormEvent; class ContactFormSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return array( ContactFormEvent::CREATE_FORM => 'createForm', ); } public function createForm($event) { //Updates url to redirect $event->getRequest()->getSession()->set('redirectUrl', 'https://example.com'); } }
如果这个项目 帮助您减少了开发时间,您可以通过顶部“赞助”按钮赞助我:(