Problem/Motivation

The ViewsFormMainForm class let's a chance to views area plugin to extend the view form. The code involved is the following:

// Give the area handlers a chance to extend the form.
$area_handlers = array_merge(array_values($view->header), array_values($view->footer));
$empty = empty($view->result);
foreach ($area_handlers as $area) {
  if (method_exists($area, 'viewsForm') && !$area->viewsFormEmpty($empty)) {
    $area->viewsForm($form, $form_state);
  }
}

But as a DX, this is not possible to know since viewsForm() and viewsFormEmpty() methods are not defined in any interface.

The purpose of this issue is to give a developper that needs to override view form a chance to know.

NOTE: viewsForm is used in core in BulkForm view field type (ie extending FieldPluginBase). But is never used in a AreaPluginBase. This means that there is even no code exemple in core to discover the existence of viewsFormEmpty().

Proposed resolution

I can see two ways to do it without BC break:

  1. Define it in existing interface (like ViewsHandlerInterface) and implement a default empty method in AreaPluginBase an. FieldPlhttps://www.drupal.org/sites/all/modules/bueditor/icons/x1.pnguginBase.
    Advantage: methods are in the current interface. The base classes implements empty method thus no BC.
    Inconvenient: since defined, the methods will actually be called everytime, despite emDty.
  2. Define the two methods in a new Interface to be implemented
    Advantage: methods will no longer need empty implementation
    Inconvenient: if no class in core implements it, will it be more discoverable by DX ?

Comments

Dom. created an issue. See original summary.

dawehner’s picture

if no class in core implements it

Well I think in core we could totally switch over to the new interface.
In case something has the method, but doesn't implement the interface we should even some @trigger_error(E_USER_DEPRECATED) error, so people can switch over.

Given that I think version 2 is both more safe but also actually better conceptually, if we would start from scratch again.

anavarre’s picture

Dom.’s picture

So going with second method, it only take a new interface with the two method definition. Nothing more.
How can DX finds out easily about it ?

Also what about the consistency between AreaPluginBase and FieldPluginBase: the second just have viewsForm() to define while the first needs two methods. Should we have both a AreaPluginFormInterface and a FieldPluginFormInterface to be define ?

Dom.’s picture

Title: Better DX for rendering forms in a AreaPluginBase » Better DX for altering views form from a AreaPluginBase

Just changing issue title for more clarity.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.0-alpha1 will be released the week of July 31, 2017, which means new developments and disruptive changes should now be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.0-alpha1 will be released the week of January 17, 2018, which means new developments and disruptive changes should now be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.