Magento 2 Custom No Route Handler


7

Tôi đã thêm một trình xử lý không có tuyến tùy chỉnh bằng mã sau đây

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

Đó là tất cả tốt nó thêm trình xử lý và tôi đã chứng minh điều đó bằng

<?php

namespace Smartie\HelloRouter\App\Router;

class NoRouteHandler implements \Magento\Framework\App\Router\NoRouteHandlerInterface
{
    public function process(\Magento\Framework\App\RequestInterface $request)
    {
        die('woop');
    }
}

Tuy nhiên, điều tôi nhận thấy là nếu tôi trả về false trong hàm process thì tôi kết thúc với bộ điều khiển Front đạt 100 lần lặp bộ định tuyến khớp . Sau khi xem NoRouteHandlerList, có vẻ như bằng cách thêm trình xử lý không có tuyến mới của tôi, nó thực sự thay thế tất cả các trình xử lý không có tuyến đường đã được thêm vào (mặc định) và tôi tự hỏi tại sao?

Mã tương tự sau đây để thêm bộ định tuyến mới có tác dụng nối thêm bộ định tuyến mới vào danh sách

<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>

Lưu ý : Đây là phiên bản magento 2 0.74.0-beta16


Tôi đã cố gắng tái tạo các vấn đề và tôi không thể. Có lẽ bạn nên cập nhật Magento lên phiên bản mới nhất.
KAndy

Câu trả lời:


4

Tôi cũng chạy vào đây. Mấu chốt của vấn đề được đề cập ở đây trong tài liệu:

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

Khi các tệp cấu hình cho một phạm vi nhất định được hợp nhất, các đối số mảng có cùng tên được hợp nhất thành một mảng mới. Nếu một cấu hình mới được tải sau đó, phạm vi cụ thể hơn hoặc thông qua mã, thì bất kỳ định nghĩa mảng nào trong cấu hình mới sẽ thay thế hoàn toàn cấu hình được tải trước đó thay vì được hợp nhất.

(nhấn mạnh của tôi)

Trong trường hợp của tôi, tôi đã thêm NoRouteHandler tùy chỉnh thông qua {module}/etc/frontend/di.xml, trong khi các trình xử lý cốt lõi được xác định trong {module}/etc/di.xml. Vì 'frontend' là một phạm vi cụ thể hơn, trình xử lý tùy chỉnh của tôi đã thay thế các trình xử lý cốt lõi thay vì thêm vào chúng.

Di chuyển của bạn di.xmltừ bất kỳ phạm vi cấu hình nào bạn có nó vào etcthư mục, và tất cả sẽ ổn.

Xem thêm:

  • ứng dụng / mã / Magento / Backend / etc / di.xml
  • ứng dụng / mã / Magento / Store / etc / di.xml
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.