单个商店的 Magento 多个动态自定义路由
Magento Multiple Dynamic Custom Routes For Single Store
我想加载我的 magento 商店
www.example.com/var1/var2
而不是 www.example.com,我希望我的产品 url 像 www.example.com/var1/var2/product-url
Var1 & var2 可以是动态变量。
帮助我在 maganeto 2.2.6
中重写我的 urls
我曾尝试开发一个自定义模块,但现在我所要做的就是将所有 magento 模块加载到我的自定义模块中。似乎我在 magento 中完全按照习惯工作,这不是一个好习惯。通过这种方式,我必须将所有 magento 模块重新初始化到我的自定义模块中。通过这种方式,magento 对我来说是无用的。
在这种情况下,您可以通过执行以下步骤使用请求路由:
- 在 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>
创建实现 RouterInterface 的路由器 class,如下所示:
class 路由器实现 \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;
}
}
运行 这个命令:
php bin/magento s:up
输入你的 url 喜欢 www.example.com/var1/var2 并查看结果
我想加载我的 magento 商店 www.example.com/var1/var2 而不是 www.example.com,我希望我的产品 url 像 www.example.com/var1/var2/product-url Var1 & var2 可以是动态变量。 帮助我在 maganeto 2.2.6
中重写我的 urls我曾尝试开发一个自定义模块,但现在我所要做的就是将所有 magento 模块加载到我的自定义模块中。似乎我在 magento 中完全按照习惯工作,这不是一个好习惯。通过这种方式,我必须将所有 magento 模块重新初始化到我的自定义模块中。通过这种方式,magento 对我来说是无用的。
在这种情况下,您可以通过执行以下步骤使用请求路由:
- 在 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>
创建实现 RouterInterface 的路由器 class,如下所示:
class 路由器实现 \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; }
}
运行 这个命令:
php bin/magento s:up
输入你的 url 喜欢 www.example.com/var1/var2 并查看结果