Estou usando o Magento 2 CE versão 2.1.0
Tomando referência a http://inchoo.net/magento-2/routing-in-magento-2/ para roteamento.
My Router.php
Controller Code
public function match(\Magento\Framework\App\RequestInterface $request) {
$identifier = trim($request->getPathInfo(), '/');
if (strpos($identifier, 'test') !== false) {
$request->setModuleName('moduletest')->setControllerName('test')->setActionName('test');
} else {
//There is no match
return;
}
return $this->actionFactory->create(
'Magento\Framework\App\Action\Forward', ['request' => $request]
);
}
Encontrei @ vendor \ magento \ framework \ App \ FrontController.php
public function dispatch(RequestInterface $request)
{
\Magento\Framework\Profiler::start('routers_match');
$routingCycleCounter = 0;
$result = null;
while (!$request->isDispatched() && $routingCycleCounter++ < 100) {
/** @var \Magento\Framework\App\RouterInterface $router */
foreach ($this->_routerList as $router) {
try {
$actionInstance = $router->match($request);
if ($actionInstance) {
$request->setDispatched(true);
$this->response->setNoCacheHeaders();
if ($actionInstance instanceof \Magento\Framework\App\Action\AbstractAction) {
$result = $actionInstance->dispatch($request);
} else {
$result = $actionInstance->execute();
}
break;
}
} catch (\Magento\Framework\Exception\NotFoundException $e) {
$request->initForward();
$request->setActionName('noroute');
$request->setDispatched(false);
break;
}
}
}
\Magento\Framework\Profiler::stop('routers_match');
if ($routingCycleCounter > 100) {
throw new \LogicException('Front controller reached 100 router match iterations');
}
return $result;
}
Eu baixei o http://inchoo.net/magento-2/routing-in-magento-2/ código do gitHub e instalei e funcionando bem. Mas não está funcionando para o meu módulo personalizado.
Quando digito http: // localhost / magento2 / mymodule / examplerouter, ele vai para o roteador do InChoo Controller e não para o meu.
Como resolver este problema?
fonte
Se o seu código for perfeito e você ainda receber um erro, verifique a
sortOrder
classe de plug-in do roteadordi.xml
.Como dizem os oficiais do magento: https://devdocs.magento.com/guides/v2.3/extension-dev-guide/routing.html
Para front-end:
Para administrador:
Sua ordem de classificação deve estar entre o roteador padrão magento e a ordem de classificação padrão do roteador.
fonte
Sei que é tarde para responder, mas seria útil para outros.
No magento 2.1.10, o roteador padrão sortOrder foi alterado para 30, fazendo com que o roteador personalizado (cujo sortOrder tenha 22 anos) solicite o loop infinito. Alterar a ordem do roteador personalizado> 30 resolve o problema.
fonte