Magento 2路由的完整教程
Magento 2路由就是定义模块的URL。
整个Magento 2应用程序流基于处理URL请求和路由器类,它们负责匹配和处理请求。
Magento 2中的请求URL是http://example.com/index.php/router_name/controller/action
在这里,router_name用于查找模块。
当在Magento 2中发出请求时, controller/action:index.php → HTTP app → FrontController → Routing → Controller processing → etc流程。
在Http类中调用FrontController来路由请求,该请求将找到controller/action匹配项。
vendor/magento/framework/App/FrontController.php
public function dispatch(RequestInterface $request) { \Magento\Framework\Profiler::start('routers_match'); $routingCycleCounter = 0; $result = null; while (!$request->isDispatched() && $routingCycleCounter++ < 100) { /** @var \Magento\Framework\App\RouterInterface $router */ foreach ($this->_routerList as $router) { try { $actionInstance = $router->match($request); if ($actionInstance) { $request->setDispatched(true); $this->response->setNoCacheHeaders(); if ($actionInstance instanceof \Magento\Framework\App\Action\AbstractAction) { $result = $actionInstance->dispatch($request); } else { $result = $actionInstance->execute(); } break; } } catch (\Magento\Framework\Exception\NotFoundException $e) { $request->initForward(); $request->setActionName('noroute'); $request->setDispatched(false); break; } } } \Magento\Framework\Profiler::stop('routers_match'); if ($routingCycleCounter > 100) { throw new \LogicException('Front controller reached 100 router match iterations'); } return $result; }
在前端和后台管理上创建自定义路由的步骤:
在实施以下方法之前,您可以参考有关Magento 2模块开发的教程。
创建前端路由:
在 app/code/[Vendor]/[Module]/etc/frontend 文件夹中创建routes.xml,添加以下代码:
<?xml version="1.0" ?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="standard"> <route frontName="helloworld" id="helloworld"> <module name="[Vendor]_[Module]"/> </route> </router> </config>
创建管理路由:
在app/code/[Vendor]/[Module]/etc/adminhtml文件夹中创建routes.xml,并添加以下代码:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="admin"> <route id="helloworld" frontName="helloworld"> <module name="[Vendor]_[Module]"/> </route> </router> </config>
使用路由重写控制器:
在 app/code/[Vendor]/[Module]/etc/frontend文件夹中创建routes.xml,并添加以下代码:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="standard"> <route frontName="helloworld" id="helloworld"> <module name="[Vendor]_[Module]"/> </route> <route id="account"> <module name="[Vendor]_[Module]" before="Magento_Customer" /> </route> </router> </config>这就是Magento 2路由的全部内容!
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。