fruitware/contact-bundle

Symfony2 的联系表单实现

安装: 80

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 23

类型:symfony-bundle

v1.0.1 2013-08-21 20:12 UTC

This package is auto-updated.

Last update: 2024-09-04 02:14:42 UTC


README

SensioLabsInsight

Build Status Total Downloads Latest Stable Version Scrutinizer Code Quality Code Coverage

此组件为 Symfony2 提供了一个联系表单。

许可证

此组件可在 MIT 许可证 下使用。

先决条件

此版本的组件需要 Symfony 2.3+。

翻译

如果您想使用此组件中提供的默认文本,请确保您已启用配置中的翻译器。

# app/config/config.yml

framework:
    translator: ~

有关翻译的更多信息,请参阅 Symfony 文档

安装

安装是一个快速 6 步的过程

  1. 使用 composer 下载 MremiContactBundle
  2. 启用组件
  3. 创建您的 Contact 类(可选)
  4. 配置 MremiContactBundle
  5. 导入 MremiContactBundle 路由
  6. 更新您的数据库模式(可选)

步骤 1:使用 composer 下载 MremiContactBundle

在您的 composer.json 中添加 MremiContactBundle

{
    "require": {
        "mremi/contact-bundle": "dev-master"
    }
}

现在运行命令让 composer 下载组件

$ php composer.phar update mremi/contact-bundle

Composer 将组件安装到项目的 vendor/mremi 目录。

步骤 2:启用组件

在 kernel 中启用组件

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Mremi\ContactBundle\MremiContactBundle(),
    );
}

步骤 3:创建您的 Contact 类(可选)

此组件的目标不是将某个 Contact 类持久化到数据库中,但您可以通过将 store_data 参数设置为 true(默认为 false)来实现。如果您不需要这样做,您可以跳到下一步。

您的首要任务是创建应用程序的 Contact 类。这个类可以看起来和表现成您想要的任何样子:添加任何您认为有用的属性或方法。这是 您的 Contact 类。

组件提供了基类,这些类已经为大多数字段进行了映射,以便更容易创建实体。以下是使用方法

  1. Entity 文件夹扩展基 Contact
  2. 映射 id 字段。它必须被保护,因为它是从父类继承的。

注意

目前,此组件仅处理 Doctrine ORM(任何 PR 都会受到欢迎 :))。

<?php
// src/Acme/ContactBundle/Entity/Contact.php

namespace Acme\ContactBundle\Entity;

use Mremi\ContactBundle\Entity\Contact as BaseContact;

class Contact extends BaseContact
{
    /**
     * @var integer
     */
    protected $id;
}
<!-- src/Acme/ContactBundle/Resources/config/doctrine/Contact.orm.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                  http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

    <entity name="Acme\ContactBundle\Entity\Contact"
            table="contact">

        <id name="id" column="id" type="integer">
            <generator strategy="AUTO" />
        </id>

    </entity>
</doctrine-mapping>

步骤 4:配置 MremiContactBundle

组件自带了一个合理的默认配置,如下所示。但是,您至少需要配置一个收件人地址。

# app/config/config.yml
mremi_contact:
    store_data:            false
    contact_class:         Mremi\ContactBundle\Model\Contact

    form:
        type:              mremi_contact
        name:              contact_form
        validation_groups: [Default]
        subject_provider:  mremi_contact.subject_provider.noop

    email:
        mailer:            mremi_contact.mailer.twig_swift
        recipient_address: # Required
        template:          MremiContactBundle:Contact:email.txt.twig

您还可以配置您喜欢的 captcha。您必须自行安装并在此处配置它。您可以从这些组件中获取一个:

或者甚至实现您自己的。

# app/config/config.yml
mremi_contact:
    form:
        captcha_type:      genemu_captcha # or any other (genemu_recaptcha, ewz_recaptcha, ...)

步骤 5:导入 MremiContactBundle 路由

现在您已激活并配置了组件,剩下的只是导入 MremiContactBundle 路由文件。

通过导入路由文件,您将能够轻松访问联系表单。

在 YAML 中

# app/config/routing.yml
mremi_contact_form:
    resource: "@MremiContactBundle/Resources/config/routing.xml"

或者如果您更喜欢 XML

<!-- app/config/routing.xml -->
<import resource="@MremiContactBundle/Resources/config/routing.xml"/>

注意

为了使用内置的电子邮件功能,您必须激活并配置 SwiftmailerBundle

步骤 6:更新您的数据库模式(可选)

如果您已配置数据存储(步骤 3),现在您可以更新数据库模式。

如果您想首先查看创建表的查询

$ app/console doctrine:schema:update --dump-sql

然后您可以运行它

$ app/console doctrine:schema:update --force

现在您可以通过 http://example.com/app_dev.php/contact 访问联系表单!

注意

如果您处于调试模式(请参阅您的前端控制器),可以通过在 URL 中添加 ?novalidate=1 来禁用 HTML5 验证。

Bootstrap

Bootstrap框架 v3.0.2 已加载并用于本扩展包提供的模板中。

Screenshot

定制化

模板化

如果您想定制此扩展包的部分功能(例如视图),请阅读Symfony文档

事件

在index动作中,联系控制器会触发3个事件

  1. 当表单初始化时发生ContactEvents::FORM_INITIALIZE
  2. 当表单成功提交时发生ContactEvents::FORM_SUCCESS
  3. 在联系表单处理过程中保存联系信息后发生ContactEvents::FORM_COMPLETED

每个事件都允许您定制本扩展包提供的默认工作流程。

贡献

有任何疑问或反馈?请提交一个问题,我会尽快回复。

这里缺少功能吗?请随意创建一个pull request来解决它!

希望这对你有所帮助,如果这样的话,请分享并推荐它! :)

@mremitsme