Postponed on

#2134513: [policy, no patch] Trait strategy

Problem/Motivation

ControllerBase is currently an abstract base class. This is ok, but stops any controller inheriting anything else, unless they directly extend controller base.

Proposed resolution

Make it a trait!

Remaining tasks

User interface changes

None

API changes

No ControllerBase abstract class anymore.

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

damiankloip’s picture

Patch to follow.

damiankloip’s picture

Status: Active » Needs review
FileSize
43.96 KB

Let's see what fails.

Status: Needs review » Needs work

The last submitted patch, 2: 2206917.patch, failed testing.

damiankloip’s picture

Status: Needs work » Needs review
FileSize
44.28 KB
1.19 KB

Whoops, a syntax error is always good.

Status: Needs review » Needs work

The last submitted patch, 4: 2206917-4.patch, failed testing.

damiankloip’s picture

Status: Needs work » Needs review
FileSize
47.98 KB
5.38 KB

Let's try this.

dawehner’s picture

+++ b/core/tests/Drupal/Tests/Core/Controller/ControllerBaseTest.php
@@ -53,15 +54,23 @@ public function testGetConfig() {
+
+/**
+ * Test controller implementing the ControllerBaseTrait.
+ */
+class TestController {
+  use ControllerBaseTrait;
+
+}

We can haz getObjectFromTrait?

damiankloip’s picture

FileSize
47.9 KB
749 bytes

Yes, yes you can haz that.

dawehner’s picture

Status: Needs review » Reviewed & tested by the community

Thank yoou!

tstoeckler’s picture

Status: Reviewed & tested by the community » Needs review
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Controller/AggregatorController.php
@@ -20,7 +21,8 @@
+class AggregatorController implements ContainerInjectionInterface {
+  use ControllerBaseTrait;

This (and all others) violate our coding standards. There should be a blank line before the use.

More importantly, however, I'm not sure this should go in as long as we haven't figured out #2134513: [policy, no patch] Trait strategy. Especially because #2079797: Provide a trait for $this->t() and $this->formatPlural() would duplicate part of the ControllerBase trait.
I.e. I think it would more sense to decompose the *parts* of ControllerBase into separate traits so people can pick and choose which ones they actually need.

ParisLiakos’s picture

+1 on #10
see point 2 in #2134513: [policy, no patch] Trait strategy
ControllerBase should be a collection of many small traits, each one targeted to a specific thing

ParisLiakos’s picture

damiankloip’s picture

Ok whatever. I'm not going to argue. You run a risk of making things confusing for people if they have to include too many traits.

Closing this then?

ParisLiakos’s picture

Status: Needs review » Postponed

i dont think it is confusing. It is like use statements. you need something? use it
or extend ControllerBase and dont care at all.

At least postponed though rather than closed

YesCT’s picture

Issue tags: +Traits
mgifford’s picture

Issue summary: View changes
YesCT’s picture

Issue summary: View changes

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.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.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.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.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.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.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should 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.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should 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.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should 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.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.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: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should 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: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

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

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

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should 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.4.x-dev » 9.5.x-dev

Drupal 9.4.9 was released on December 7, 2022 and is the final full bugfix release for the Drupal 9.4.x series. Drupal 9.4.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.5.x-dev branch from now on, and new development or disruptive changes should 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: 9.5.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. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.