Magento2自定义路由实现URL重写

最近在写个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');
    }