Last updated 10 April 2017. Created on 6 September 2013.
Edited by AndyF, jrockowitz, zerolab, Sandip Choudhury. Log in to edit this page.

Drupal has a lot of modules aimed at helping site builders and users add forms to their sites. What follows is a rough comparison of three of them for Drupal 8 and five of them for Drupal 7. Please add any missed or new information about the ones listed.

Drupal 8

Contact Storage

Contact Storage module will provide storage for Contact messages which are fully-fledged entities in Drupal 8. This plus core contact module aim to provide functionality equivalent to the base-features of Webform or Entity Form.

Webform

Webform 8.x-5.x is a completely new code base, that takes a different, but familiar approach to solving the challenges of building rich, flexible, and maintainable client facing forms for a Drupal website. Webform 8-x-5.x includes many new features and leverages improvements in Drupal 8, including OO design patterns, extendable plugins, and automated tests.

Please visit the Webform 8.x-5.x documentation pages for an introduction, features overview, video tutorials, and a roadmap.

Like Webform in Drupal 7, it does not use Drupal 8 Field module field types.

eForm

The EForm module (Entity Form in Drupal 7) enables you to create front-end forms (fieldable entities) which contain standard Drupal fields. Eform's maintainer is considering whether the module is needed anymore with core Contact and Contact Storage taking a similar approach. Is this module still needed?

Detailed feature comparison

Here's a more detailed feature-comparison of Webform 8.x-5.x and Contact Storage 8.x-1.x (originally made on 7 April 2017). It's worth noting that Contact Storage relies on the Contact module which in turn relies on the Field UI; Contact Storage out of the box is a minimalistic solution with limited (but useful!) functionality. This means it can be extended with core mechanisms such as CRUD entity hooks and overriding services; also there's a greater chance that a general purpose module will play nicely with it (eg. the Conditional Fields module is for entity form displays in general, not the Contact module).

Webform is much heavier; it has a great deal of functionality enabled right within the one module, and that's on top of supplying all the normal field elements (because it doesn't just use the Field API).

Feature Webform-8.x-5.x Contact Storage 8.x-1.x
Submission Views integration Webform Views 8.x-5.x (currently dev) Yes
Open/close form Yes Yes
Scheduled open/close form Yes No
HTML email Yes Yes(2)
Templates(1) Yes No
Reusable options Yes No
Tokens in email(3) Yes For names, email addresses and the subject: #2734289: Configurable mail subject with token support
Redirect path Yes Yes
Confidential form(4) Yes No
Styles in config(5) Yes No
JS in config(5) Yes No
Per-user submission limit Yes Yes
Global submission limit Yes No
Inline help videos Yes No
Customise submit text Yes Yes
Prevent duplicate submissions Yes No
Disable back button Yes No
Warn about unsaved changes Yes No
Preview Yes Yes
Create a Wizard Yes No
Save draft Yes No
Supports private files Yes Yes
Export data Yes Yes (Views or Contact Storage Export)
Can customise final submission(6) Yes, by implementing WebformHandlerFormBase Yes, by implementing an entity creation/update hook
Conditional fields Yes Possibly with Field States UI or Conditional Fields (both untested)
Internationalization Yes Yes
Embed form Provides webform ER field Can use vanilla ER field
AJAX submission #2757491: Allow Webforms to be submitted using AJAX Contact AJAX
Per-form access control No #2724503: Per form based access permissions
  1. For more detail see Reusable Templates from Webform Features.
  2. Apparently only tested with Swift Mailer
  3. Message, subject and email addresses.
  4. Only anons can fill out.
  5. The configuration can contain eg. HTML class names, inline styling, JS file path, etc.
  6. Eg. send data to a custom endpoint.

Drupal 7

Webform

Webform is a module designed to allow you to add custom forms to the front-end of your site. Each form is stored against a node, so you add new forms to your site as if you were adding content. It's useful for things like Survey websites or just where you want a couple of forms that differ from the standard contact form.

Pros

  • Webform has been around for a long time, its very well established and has a large number of modules that integrate with it.
  • Webform can make a wide variety of forms with lots of different elements available out of the box.
  • Because Webforms are nodes, they inherit all the functionality that nodes have (scheduled publishing, cloning, access control, etc.).
  • Webforms are lighter-weight and more scalable than entity-based forms. Can handle multiple-page forms with hundreds of fields, many different unrelated webforms (>10,000), many webform submissions per form (>100,000)
  • Fields can be conditionally shown (intra- and inter-page).
  • Webforms offers analysis of results and downloading of submissions.

Cons

  • Webform submissions are stored in their own custom way - not using the standard entity system.
  • Different field types use Webform-specific integrations, rather than Field module integrations.
  • There is little or no integration with a lot of modules because the submissions do not use entities.
  • Cannot edit entities using the web forms.
  • Views integration for submissions is limited (display, but no filtering or sorting).

Entityforms

The Entityforms module seems to be the same as web form but using the Entity API. It uses the normal entity/field api as a kind of form builder. You can have as many 'Forms' as you like (each 'form' is a different bundle on the Entity Form entity) and you can add whatever fields you want.

Pros

  • Entityforms can make a wide variety of forms with lots of different fields available.
  • Entityform is already being ported to Drupal 8.
  • Entityforms uses the entity API which guarantees it will work with:
    • Views
    • Rules
    • Entity Reference
    • Organic Groups
    • Every field module in Drupal, including: Date, File, Geofield, Name, Address, Media and many more...
  • Other tools for Entities will work with the module, for example: Entity Operations.
  • Integrates with field group
  • Integrates with Conditional Fields
  • Entityform is fairly well established.

Cons

  • Entityforms cannot (without some magic) be used to edit nodes or comments.
  • You can only have one form for each bundle.
  • Any form can only edit one submission entity at a time.

Flexiform

Flexiform's main purpose is to provide a UI for building forms to add/edit other entities. Flexiform allows you as a site builder to configure as many different forms as you like to edit whatever entities you want. With its pluggable Builder and Element system, it could possible to configure multi-step forms for any entity on your website. Flexiform also uses a relationship system similar to CTools to allow you to edit multiple entities with one form.

Flexiform can provide a complete separation between how content is stored and how content is edited.

The flexiform_webform sub-module provides basically the same functionality as Entity Forms, so a combination of Entityform and flexiform would be a good one.

Pros

  • Flexiform can make a wide variety of forms with lots of different fields available.
  • Flexiform uses the entity API which guarantees it will work with:
    • Views
    • Rules
    • Entity Reference
    • Organic Groups
    • Every field module in Drupal, including: Date, File, Geofield, Name, Address, Media and many more...
  • Integrates with field group
  • Flexiform can be used to edit or add any entity.
  • Flexiform can pull multiple entities into one form using relationships. For example, creating a user edit form the has fields from various profile2 is easy with flexiform.
  • [WIP]Flexiform will be allow you to configure multi step forms.
  • Flexiform can have an unlimited number of forms for one entity type. If you want 3 different ways to submit a feedback form, but want the responses from that form to be treated as the same thing (in one view for example) this is easy with flexiform.
  • Flexiform can override existing node forms allowing site builders to edit existing system forms without resorting to code and hook_form_alter().
  • Flexiform has a pluggable element system, its easy to add any element you want with a bit of code!
  • Flexiform allows you to add blocks of custom html anywhere on your form.
  • Flexiform is already being ported to Drupal 8.
  • The maintainers of flexiform already use it one several large, high-traffic websites. Including Event booking systems and University Management software.

Cons

Form Builder

Form Builder provides a UI for constructing Drupal Form API forms. It therefore has all the flexibility of the Drupal Form API (that's alot of flexibility!), however it does not provide any way to save the submissions. It's a bit different from the other 3 as it just exports the code for you to add the form to your site somewhere, but leaves the site builder to program the validation and submission mechanisms.

Quick Forms

Lightweight alternative to Webform. Created mostly for the use by developers with extensibility in mind.

Looking for support? Visit the Drupal.org forums, or join #drupal-support in IRC.

Comments

nourheine’s picture

hi everybody , i'm new in the world of drupal, i create an inscription form with webform module but when i click submit an error occured
please help me , the error:"Unable to send e-mail. Contact the site administrator if the problem persists." i'm completely blocked , answer me here is my number +216 25824929