Ich habe einen benutzerdefinierten No-Route-Handler mit dem folgenden Code hinzugefügt
<?xml version="0.1"?>
<config>
<type name="Magento\Framework\App\Router\NoRouteHandlerList">
<arguments>
<argument name="handlerClassesList" xsi:type="array">
<item name="hello" xsi:type="array">
<item name="class" xsi:type="string">Smartie\HelloRouter\App\Router\NoRouteHandler</item>
<item name="sortOrder" xsi:type="string">10</item>
</item>
</argument>
</arguments>
</type>
</config>
Was alles gut ist, fügt es den Handler hinzu und ich habe es durch bewiesen
<?php
namespace Smartie\HelloRouter\App\Router;
class NoRouteHandler implements \Magento\Framework\App\Router\NoRouteHandlerInterface
{
public function process(\Magento\Framework\App\RequestInterface $request)
{
die('woop');
}
}
Was mir jedoch aufgefallen ist, ist, dass wenn ich in der Prozessfunktion false zurückgebe, der Front-Controller 100 Router-Match-Iterationen erreicht hat . Nach dem Betrachten der NoRouteHandlerList scheint es, dass durch Hinzufügen meines neuen No-Route-Handlers tatsächlich alle bereits hinzugefügten No-Route-Handler (der Standard-Handler) ersetzt werden, und ich habe mich gefragt, warum?
Der folgende ähnliche Code zum Hinzufügen eines neuen Routers hat den Effekt, dass ein neuer Router an die Liste angehängt wird
<type name="Magento\Framework\App\RouterList">
<arguments>
<argument name="routerList" xsi:type="array">
<item name="custom" xsi:type="array">
<item name="class" xsi:type="string">Smartie\HelloRouter\Controller\Router</item>
<item name="disable" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="string">20</item>
</item>
</argument>
</arguments>
</type>
Hinweis : Dies ist Magento 2 Version 0.74.0-beta16
Antworten:
Ich bin auch darauf gestoßen. Der Kern des Problems wird hier in der Dokumentation behandelt:
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html#dep-inj-mod-type-args
(Hervorhebung von mir)
In meinem Fall habe ich einen benutzerdefinierten NoRouteHandler hinzugefügt
{module}/etc/frontend/di.xml
, während die Core-Handler in definiert sind{module}/etc/di.xml
. Da 'Frontend' ein spezifischerer Bereich ist, hat mein benutzerdefinierter Handler die Core-Handler ersetzt, anstatt sie zu ergänzen.Verschieben Sie Ihren
di.xml
von dem Konfigurationsbereich, in dem Sie ihn haben, in denetc
Ordner, und alles wird gut.Siehe auch:
quelle