次のコードを使用して、カスタムのルートなしハンドラを追加しました
<?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>
ハンドラーを追加して、それを証明しました。
<?php
namespace Smartie\HelloRouter\App\Router;
class NoRouteHandler implements \Magento\Framework\App\Router\NoRouteHandlerInterface
{
public function process(\Magento\Framework\App\RequestInterface $request)
{
die('woop');
}
}
しかし、私が気付いたことは、プロセス関数でfalseを返すと、フロントコントローラーが100ルーターの一致反復に達したことです。NoRouteHandlerListを確認した後、新しいno routeハンドラーを追加することで、実際には既に追加されているすべてのno routeハンドラー(デフォルトのハンドラー)が置き換えられたようです。なぜでしょうか。
新しいルーターを追加する次の同様のコードは、新しいルーターをリストに追加する効果があります
<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>
注:これはmagento 2バージョン0.74.0-beta16です