Skip to main contentSkip to footer

Service 'page_manager.variant_route_filter' for consumer 'router.no_access_checks' does not implement

Rupak Nepali
Share:
Service 'page_manager.variant_route_filter' for consumer 'router.no_access_checks' does not implement

Service ‘page_manager.variant_route_filter’ for consumer ‘router.no_access_checks’ does not implement

The website encountered an unexpected error. Please try again later.

Symfony\Component\DependencyInjection\Exception\LogicException: Service ‘page_manager.variant_route_filter’ for consumer ‘router.no_access_checks’ does not implement Drupal\Core\Routing\FilterInterface. in Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass->processServiceCollectorPass() (line 164 of D:\xampp\htdocs\axway\corporate-8\web\core\lib\Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass.php).
Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass->processServiceCollectorPass(Array, ‘router.no_access_checks’, Object) (Line: 97)
Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass->process(Object) (Line: 141)
Symfony\Component\DependencyInjection\Compiler\Compiler->compile(Object) (Line: 757)
Symfony\Component\DependencyInjection\ContainerBuilder->compile() (Line: 1307)
Drupal\Core\DrupalKernel->compileContainer() (Line: 884)
Drupal\Core\DrupalKernel->initializeContainer() (Line: 466)
Drupal\Core\DrupalKernel->boot() (Line: 656)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

We can solve the problem by applying the following patch:

cd modules/contrib/page_manager
wget https://www.drupal.org/files/issues/2918564-22.patch
patch -p 1 < 2918564-22.patch
diff --git a/page_manager.services.yml b/page_manager.services.yml
index 33bce44..f8fcf78 100644
--- a/page_manager.services.yml
+++ b/page_manager.services.yml
@@ -27,8 +27,10 @@ services:
     arguments: ['@entity_type.manager', '@path.current', '@request_stack']
     tags:
       # Run as late as possible to allow all other filters to run first.
-      - { name: non_lazy_route_filter, priority: -1024 }
+      # @todo Review this when https://www.drupal.org/node/2915772 is done.
+      - { name: route_filter, priority: -1024 }
       - { name: service_collector, tag: non_lazy_route_enhancer, call: addRouteEnhancer }
+      - { name: service_collector, tag: route_enhancer, call: addRouteEnhancer }
   page_manager.route_name_response_subscriber:
     class: Drupal\page_manager\EventSubscriber\RouteNameResponseSubscriber
     tags:
diff --git a/src/Routing/RouteEnhancerCollectorTrait.php b/src/Routing/RouteEnhancerCollectorTrait.php
index 0ca6c44..e91e4a3 100644
--- a/src/Routing/RouteEnhancerCollectorTrait.php
+++ b/src/Routing/RouteEnhancerCollectorTrait.php
@@ -7,24 +7,22 @@
 
 namespace Drupal\page_manager\Routing;
 
-use Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface;
+use Drupal\Core\Routing\EnhancerInterface;
 
 /**
  * Provides a trait to make a service a collector of route enhancers.
- *
- * @todo Move to Symfony CMF in https://github.com/symfony-cmf/Routing/pull/155.
  */
 trait RouteEnhancerCollectorTrait {
 
   /**
-   * @var \Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface[]
+   * @var \Drupal\Core\Routing\EnhancerInterface[]
    */
   protected $enhancers = array();
 
   /**
    * Cached sorted list of enhancers
    *
-   * @var \Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface[]
+   * @var \Drupal\Core\Routing\EnhancerInterface[]
    */
   protected $sortedEnhancers = array();
 
@@ -35,12 +33,12 @@ trait RouteEnhancerCollectorTrait {
    * The order of the enhancers is determined by the priority, the higher the
    * value, the earlier the enhancer is run.
    *
-   * @param \Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface $enhancer
+   * @param \Drupal\Core\Routing\EnhancerInterface $enhancer
    * @param int $priority
    *
    * @return $this
    */
-  public function addRouteEnhancer(RouteEnhancerInterface $enhancer, $priority = 0) {
+  public function addRouteEnhancer(EnhancerInterface $enhancer, $priority = 0) {
     if (empty($this->enhancers[$priority])) {
       $this->enhancers[$priority] = array();
     }
@@ -54,7 +52,7 @@ trait RouteEnhancerCollectorTrait {
   /**
    * Sorts the enhancers and flattens them.
    *
-   * @return \Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface[]
+   * @return \Drupal\Core\Routing\EnhancerInterface[]
    *   The enhancers ordered by priority.
    */
   protected function getRouteEnhancers() {
@@ -70,7 +68,7 @@ trait RouteEnhancerCollectorTrait {
    *
    * The highest priority number is the highest priority (reverse sorting).
    *
-   * @return \Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface[]
+   * @return \Drupal\Core\Routing\EnhancerInterface[]
    *   The sorted enhancers.
    */
   protected function sortRouteEnhancers() {
diff --git a/src/Routing/VariantRouteFilter.php b/src/Routing/VariantRouteFilter.php
index 0c271d8..b23bda8 100644
--- a/src/Routing/VariantRouteFilter.php
+++ b/src/Routing/VariantRouteFilter.php
@@ -1,17 +1,12 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\page_manager\Routing\VariantRouteFilter.
- */
-
 namespace Drupal\page_manager\Routing;
 
 use Drupal\Component\Plugin\Exception\ContextException;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Path\CurrentPathStack;
-use Symfony\Cmf\Component\Routing\NestedMatcher\RouteFilterInterface;
+use Drupal\Core\Routing\FilterInterface;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\RequestStack;
@@ -25,7 +20,7 @@ use Symfony\Component\Routing\RouteCollection;
  * needs to be filtered. Here is where we run variant selection, which requires
  * gathering contexts.
  */
-class VariantRouteFilter implements RouteFilterInterface {
+class VariantRouteFilter implements FilterInterface {
 
   use RouteEnhancerCollectorTrait;
 
@@ -141,9 +136,9 @@ class VariantRouteFilter implements RouteFilterInterface {
           return $name;
         }
 
-        // Restore the original request attributes, this must be done in the loop
-        // or the request attributes will not be calculated correctly for the
-        // next route.
+        // Restore the original request attributes, this must be done in
+        // the loop or the request attributes will not be calculated correctly
+        // for the next route.
         $request->attributes->replace($original_attributes);
         $this->requestStack->pop();
       }
diff --git a/tests/src/Unit/VariantRouteFilterTest.php b/tests/src/Unit/VariantRouteFilterTest.php
index 1664fbb..ea60e91 100644
--- a/tests/src/Unit/VariantRouteFilterTest.php
+++ b/tests/src/Unit/VariantRouteFilterTest.php
@@ -14,7 +14,7 @@ use Drupal\Core\Path\CurrentPathStack;
 use Drupal\page_manager\PageVariantInterface;
 use Drupal\page_manager\Routing\VariantRouteFilter;
 use Drupal\Tests\UnitTestCase;
-use Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface;
+use Drupal\Core\Routing\EnhancerInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\Routing\Route;
@@ -331,7 +331,7 @@ class VariantRouteFilterTest extends UnitTestCase {
     $this->currentPath->getPath($request)->willReturn('/path/with/1');
     $this->pageVariantStorage->load('a_variant')->willReturn($page_variant->reveal());
 
-    $route_enhancer = $this->prophesize(RouteEnhancerInterface::class);
+    $route_enhancer = $this->prophesize(EnhancerInterface::class);
     $this->routeFilter->addRouteEnhancer($route_enhancer->reveal());
     $result_enhance_attributes = $expected_enhance_attributes = [
       'foo' => 'bar',
@@ -375,7 +375,7 @@ class VariantRouteFilterTest extends UnitTestCase {
     $this->currentPath->getPath($request)->willReturn('/path/with/1');
     $this->pageVariantStorage->load('a_variant')->willReturn($page_variant->reveal());
 
-    $route_enhancer = $this->prophesize(RouteEnhancerInterface::class);
+    $route_enhancer = $this->prophesize(EnhancerInterface::class);
     $this->routeFilter->addRouteEnhancer($route_enhancer->reveal());
     $expected_enhance_attributes = [
       'foo' => 'bar',
@@ -436,7 +436,7 @@ class VariantRouteFilterTest extends UnitTestCase {
     $this->currentPath->getPath($request)->willReturn('/path/with/1');
 
     $expected_attributes = ['slug' => 1, '_route_object' => $route, '_route' => $route_name];
-    $route_enhancer = $this->prophesize(RouteEnhancerInterface::class);
+    $route_enhancer = $this->prophesize(EnhancerInterface::class);
     $route_enhancer->enhance($expected_attributes, $request)->willReturn(['slug' => 'slug 1']);
     $this->routeFilter->addRouteEnhancer($route_enhancer->reveal());
 

Comments

Join the conversation and share your thoughts

Leave a Comment

Your comment will be reviewed before publishing.

Be the first to comment on this post!

Innovation

Let's Make Something Amazing Together

We always provide our best creative ideas at the highest level. Tell us about your project and we will make it work.

InnovateBringing innovative solutions to complex problems
AutomateStreamlining processes through automation
DominateLeading the market with exceptional results
Build Smarter and Launch FasterEfficient development for rapid deployment