3

I created custom router. But, when I run it display error.

Front controller reached 100 router match iterations

di.xml :

<type name="Magento\Framework\App\RouterList">
    <arguments>
        <argument name="routerList" xsi:type="array">
            <item name="testRouter" xsi:type="array">
                <item name="class" xsi:type="string">Vendor\Module\Controller\Router</item>
                <item name="disable" xsi:type="boolean">false</item>
                <item name="sortOrder" xsi:type="string">60</item>
            </item>
        </argument>
    </arguments>
</type>

Router.php :

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Vendor\Module\Controller;

/**
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class Router implements \Magento\Framework\App\RouterInterface
{
    /**
     * @var \Magento\Framework\App\ActionFactory
     */
    protected $actionFactory;

    /**
     * Event manager
     *
     * @var \Magento\Framework\Event\ManagerInterface
     */
    protected $_eventManager;

    /**
     * Store manager
     *
     * @var \Magento\Store\Model\StoreManagerInterface
     */
    protected $_storeManager;

    /**
     * News factory
     *
     * @var \Vendor\Module\Model\TestFactory
     */
    protected $_testFactory;

    /**
     * Config primary
     *
     * @var \Magento\Framework\App\State
     */
    protected $_appState;

    /**
     * Url
     *
     * @var \Magento\Framework\UrlInterface
     */
    protected $_url;

    /**
     * Response
     *
     * @var \Magento\Framework\App\ResponseInterface
     */
    protected $_response;

    /**
     * [__construct description]
     * @param \Magento\Framework\App\ActionFactory       $actionFactory [description]
     * @param \Magento\Framework\Event\ManagerInterface  $eventManager  [description]
     * @param \Magento\Framework\UrlInterface            $url           [description]
     * @param \Vendor\Module\Model\TestFactory           $testFactory   [description]
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager  [description]
     * @param \Magento\Framework\App\ResponseInterface   $response      [description]
     */
    public function __construct(
        \Magento\Framework\App\ActionFactory $actionFactory,
        \Magento\Framework\Event\ManagerInterface $eventManager,
        \Magento\Framework\UrlInterface $url,
        \Vendor\Module\Model\TestFactory $testFactory,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Framework\App\ResponseInterface $response
    ) {
        $this->actionFactory = $actionFactory;
        $this->_eventManager = $eventManager;
        $this->_url = $url;
        $this->_testFactory = $testFactory;
        $this->_storeManager = $storeManager;
        $this->_response = $response;
    }

    /**
     * Validate and Match Vendor Module and modify request
     *
     * @param \Magento\Framework\App\RequestInterface $request
     * @return \Magento\Framework\App\ActionInterface|null
     */
    public function match(\Magento\Framework\App\RequestInterface $request)
    {
        $identifier = trim($request->getPathInfo(), '/');

        $condition = new \Magento\Framework\DataObject(['identifier' => $identifier, 'continue' => true]);
        $this->_eventManager->dispatch(
            'vendor_module_controller_router_match_before',
            ['router' => $this, 'condition' => $condition]
        );
        $identifier = $condition->getIdentifier();

        if ($condition->getRedirectUrl()) {
            $this->_response->setRedirect($condition->getRedirectUrl());
            $request->setDispatched(true);
            return $this->actionFactory->create(\Magento\Framework\App\Action\Redirect::class);
        }

        if (!$condition->getContinue()) {
            return null;
        }

        /** @var \Vendor\Module\Model\Test $test */
        $test = $this->_testFactory->create();
        $testId = $test->checkIdentifier($identifier, $this->_storeManager->getStore()->getId());
        if (!$testId) {
            return null;
        }

        $request->setModuleName('test')->setControllerName('index')->setActionName('view')->setParam('test_id', $testId);
        $request->setAlias(\Magento\Framework\Url::REWRITE_REQUEST_PATH_ALIAS, $identifier);

        return $this->actionFactory->create(\Magento\Framework\App\Action\Forward::class);
    }
}

View.php :

<?php

namespace Vendor\Module\Controller\News;

use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;

class View extends Action
{
    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @var \Vendor\Module\Model\TestFactory
     */
    protected $_testFactory;

    /**
     * [__construct description]
     * @param Context                                    $context           [description]
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory [description]
     * @param \Vendor\Module\Model\TestFactory         $testFactory       [description]
     */
    public function __construct(
        Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
        \Vendor\Module\Model\TestFactory $testFactory
    ) {
        $this->resultPageFactory = $resultPageFactory;
        $this->_testFactory = $testFactory;
        parent::__construct($context);
    }

    public function execute()
    {
        $id = $this->_request->getParam('test_id');
        $testColl = $this->_testFactory->load($id);
        $this->_view->loadLayout();
        $block = $this->_view->getLayout()->getBlock('testBlock');
        $block->setCatalogRule($testColl);
        $this->_view->renderLayout();
        $resultPage = $this->resultPageFactory->create();
        $resultPage->getConfig()->getTitle()->set(__("Testing"));
    }
}

How to solve it?

2

1 Answer 1

5

I Was Facing same issue from last 4 Hours Then i got Solution

This Might Occur Due to Many Different Reasons

  1. Incorrect Sort Order

SortOrder of router in Vendor\Module\etc\frontend\di.xml

SortOrder Fir Router Must Be Between 31-99

<type name="Magento\Framework\App\RouterList">
        <arguments>
            <argument name="routerList" xsi:type="array">
                <item name="pagesRouter" xsi:type="array">
                    <item name="class" xsi:type="string">Vendor\Module\Controller\Router</item>
                    <item name="disable" xsi:type="boolean">false</item>
                    <item name="sortOrder" xsi:type="string">60</item>
                </item>
            </argument>
        </arguments>
    </type>

after that run command

bin/magento cache:flush
  1. Use FronName Instead of Module Name

i myself mistakenly wrote my module name in

$request->setModuleName('Vendor_ModuleName')

it have to Be FrontName instead od ModuleName

$request->setModuleName('frontname')

Some other Possible Solutions Are As follows

Extending This Class in Controller After Extending

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.