Ich verwende Magento 2 CE Version 2.1.0
Verweis auf http://inchoo.net/magento-2/routing-in-magento-2/ für das Routing.
Mein 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]
);
}
Ich habe @ vendor \ magento \ framework \ App \ FrontController.php gefunden
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;
}
Ich habe http://inchoo.net/magento-2/routing-in-magento-2/ gitHub Code heruntergeladen und installiert und funktioniert einwandfrei. Aber es funktioniert nicht für mein benutzerdefiniertes Modul.
Wenn ich http: // localhost / magento2 / mymodule / examplerouter eingebe , geht es zum InChoo Controller Router, nicht zu meinem.
Wie kann man dieses Problem lösen?
quelle
Wenn Ihr Code perfekt ist und Sie immer noch eine Fehlermeldung erhalten, müssen Sie Ihre
sortOrder
Router-Plugin-Klasse eincheckendi.xml
.Wie Magento-Beamte sagen: https://devdocs.magento.com/guides/v2.3/extension-dev-guide/routing.html
Für das Frontend:
Für den Administrator:
Ihre Sortierreihenfolge sollte zwischen der Magento-Standardrouter- und der Standard-Routersortierreihenfolge liegen.
quelle
Ich weiß, dass es spät ist zu antworten, aber es wäre hilfreich für andere.
In Magento 2.1.10 wurde der Standard-Router sortOrder in 30 geändert, sodass der benutzerdefinierte Router (sortOrder ist 22) eine Endlosschleife für die Weiterleitungsanforderung bereitstellt. Ändern Sie die benutzerdefinierte Router-Reihenfolge> 30, um das Problem zu beheben.
quelle