最近在写个magento2的blog插件,需要实现URL伪静态。
更多可以参考magento2自带的CMS 模块
代码如下:
先定义di文件,app/code/Mageoo/MyBlog/etc/frontend/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="cms" xsi:type="array">
<item name="class" xsi:type="string">Mageoo\MyBlog\Controller\Router</item>
<item name="disable" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="string">70</item>
</item>
</argument>
</arguments>
</type>
</config>
di.xml配置对应的Router class文件 app/code/Mageoo/MyBlog/Controller/Router.php
public function match(\Magento\Framework\App\RequestInterface request)
{identifier = trim(request->getPathInfo(), '/');condition = new \Magento\Framework\DataObject(['identifier' => identifier, 'continue' => true]);this->_eventManager->dispatch(
'cms_controller_router_match_before',
['router' => this, 'condition' =>condition]
);
identifier =condition->getIdentifier();
if (condition->getRedirectUrl()) {this->_response->setRedirect(condition->getRedirectUrl());request->setDispatched(true);
return this->actionFactory->create('Magento\Framework\App\Action\Redirect');
}
if (!condition->getContinue()) {
return null;
}
//identifier 获取到了identifier 后,就可以查找具体blogid,然后把参数分发到具体的Action处理。
request->setModuleName('myblog')->setControllerName('index')->setActionName('index')->setParam('blogid',blogid);
request->setAlias(\Magento\Framework\Url::REWRITE_REQUEST_PATH_ALIAS,identifier);
return $this->actionFactory->create('Magento\Framework\App\Action\Forward');
}