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?

asked Mar 8, 2019 at 11:44
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

answered Jul 24, 2019 at 10:25

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.