Magento 2カスタムのルートハンドラーなし


7

次のコードを使用して、カスタムのルートなしハンドラを追加しました

<?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です


問題の再現を試みましたが、できません。Magentoを最新バージョンに更新する必要があるかもしれません。
カンディ

回答:


4

私もこれに遭遇しました。問題の要点は、ドキュメントのここでカバーされています:

http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html#dep-inj-mod-type-args

特定のスコープの構成ファイルがマージされると、同じ名前の配列引数が新しい配列にマージされます。後で、より具体的なスコープまたはコードを介して新しい構成が読み込まれると、新しい構成の配列定義は、マージされるのではなく、以前に読み込まれた構成を完全に置き換えます

(強調鉱山)

私の場合、{module}/etc/frontend/di.xmlコアハンドラーはで定義されていますが、カスタムのNoRouteHandlerをを通じて追加していました{module}/etc/di.xml。「フロントエンド」はより具体的なスコープであるため、コアハンドラーに追加するのではなく、カスタムハンドラーがコアハンドラーを置き換えました。

di.xmlあなたがそれを持っているどんな設定スコープからでもあなたをetcフォルダに移してください、そしてすべてはうまくいくでしょう。

以下も参照してください。

  • app / code / Magento / Backend / etc / di.xml
  • app / code / Magento / Store / etc / di.xml
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.