Magento2处理请求的结构如下:
{frontName}/{controller}/{action}
但我需要处理一些像
这样的结构的请求 {frontName}/[params1]/[paramsX]...[?queryString]
最好的解决方法是什么? controller_front_send_response_before的事件linstener? Magento \ UrlRewrite \ Controller \ Route的拦截器? 或任何其他......非常感谢
也许.htaccess重写?
答案 0 :(得分:0)
感谢@ RobbieAverill的评论。 link很有用。
我在di.xml
创建了app/code/MyVendor/MyModule/etc/frontend
,其中包含:
<?xml version="1.0"?>
<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="app_api_router" xsi:type="array">
<item name="class" xsi:type="string">MyVendor\MyModule\Controller\Router</item>
<item name="disable" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="string">10</item>
</item>
</argument>
</arguments>
</type>
</config>
并在Router.php
app/code/MyVendor/MyModule/Controller/Router.php
<?php
namespace MyVendor\AppApi\Controller;
class Router implements \Magento\Framework\App\RouterInterface
{
public function match(\Magento\Framework\App\RequestInterface $request)
{
$identifier = trim($request->getPathInfo(), '/');
if(strpos($identifier, 'routes.xml frontName') === 0) {
// MY LOGIC CODE HERE
}
}
}