Magento单个商店的多个动态自定义路线

时间:2018-12-17 08:16:13

标签: magento routes magento2 router magento2.2

我想将我的magento商店加载到 www.example.com/var1/var2 而不是www.example.com,我希望我的产品网址像www.example.com/var1/var2/product-url Var1和var2可以是动态变量。 帮我在Maganeto 2.2.6中重写我的网址

我尝试开发的是自定义模块,但是现在我要做的就是将所有magento模块加载到我的自定义模块中。似乎在magento中完全自定义工作,这不是一个好习惯。这样,我必须将所有magento模块重新初始化为我的自定义模块。通过这种方式,magento对我来说毫无用处。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以通过以下步骤使用请求路由:

  1. 在YourVendor / YourModule / etc / di.xml下创建具有以下内容的di.xml:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Framework\App\RouterList"> <arguments> <argument name="routerList" xsi:type="array"> <item name="custom_router" xsi:type="array"> <item name="class" xsi:type="string">YourVendor\YourModule\Controller\Router </item> <item name="disable" xsi:type="boolean">false</item> <item name="sortOrder" xsi:type="string">70</item> </item> </argument> </arguments> </type> </config>

  1. 创建实现RouterInterface的Router类,如下所示:

    类路由器实现\ Magento \ Framework \ App \ RouterInterface {     私人$ actionFactory;

    /**
     * Router constructor.
     * @param \Magento\Framework\App\ActionFactory $actionFactory
     */
    
    public function __construct(\Magento\Framework\App\ActionFactory $actionFactory)
    {
        $this->actionFactory = $actionFactory;
    }
    
    public function match(\Magento\Framework\App\RequestInterface $request)
    {
        $info = $request->getPathInfo();
        if (preg_match("%^/(var1/var2)(.*?)$%", $info, $m)) {
            $request->setPathInfo(str_replace('var1/var2', '', $info));
            return $this->actionFactory->create('Magento\Framework\App\Action\Forward',
                ['request' => $request]);
        }
        return null;
    }
    

    }

  2. 运行此命令:

    php bin / magento s:up

输入您的网址,例如www.example.com/var1/var2并查看结果